2013-08-29 18 views
5

Jak testować jednostkę prywatną (czyli z widocznością paczki) sklasyfikowaną w java?Testy z prywatnymi jednostkami klasy

Mam pakiet, tylko jedna klasa jest publiczna w tym pakiecie, inne klasy są prywatne. Jak pokryć inne klasyfikowane za pomocą testów jednostkowych? Chciałbym włączyć testy jednostkowe w słoiku do odpoczynku.

+0

są prywatne lub zapakować prywatne? Jeśli są one pakietami prywatnymi, możesz je przetestować jak każdą inną klasę, pod warunkiem, że twoje testy są w tym samym pakiecie (co powinny ...) – assylias

Odpowiedz

9

Utwórz klasę testów jednostkowych w tym samym pakiecie.

Na przykład, Jeśli com.example.MyPrivateClass się w src/main/java/com/example/MyPrivateClass.java

Następnie klasa Test będzie w tym samym opakowaniu com.example.MyPrivateClassTestCase i będzie zlokalizowany w src/test/java/com/example/MyPrivateClassTestCase.java

2

Jak wskazano w @ odpowiedź Kowser za test może być w tym samym pakiet.

W Eclipse i zakładam, że inne IDE, można mieć zajęcia w różnych projektach, ale w tym samym pakiecie. Projekt może zostać zadeklarowany jako zależny od innego projektu, dzięki czemu klasy innych projektów będą dostępne. Pozwala to na oddzielny test jednostkowy projektu, który zależy od projektu produkcyjnego i podąża za jego strukturą pakietu, ale ma swój własny katalog główny.

Ta struktura kodu testowego jest całkowicie oddzielona od kodu produkcyjnego.

3

Istnieją dwa sposoby, aby to zrobić.

Standardowym sposobem jest zdefiniowanie klasy testowej w tym samym pakiecie klasy, która ma zostać przetestowana. Należy to łatwo zrobić, ponieważ współczesne IDE generuje przypadek testowy w tym samym pakiecie testowanej klasy domyślnie.

Niestandardowy, ale bardzo przydatny sposób polega na użyciu refleksji. Pozwala to na zdefiniowanie prywatnych metod jako prawdziwych "prywatnych" zamiast "pakietów prywatnych". Na przykład, jeśli masz zajęcia.

class MyClass { 
    private Boolean methodToBeTested(String argument) { 
     ........ 
    } 
} 

Możesz mieć swoje metody badawczej takiego:

class MyTestClass { 

    @Test 
    public void testMethod() { 
     Method method = MyClass.class.getDeclaredMethod("methodToBeTested", String.class); 
     method.setAccessible(true); 
     Boolean result = (Boolean)method.invoke(new MyClass(), "test parameter"); 

     Assert.assertTrue(result); 
    } 
} 
Powiązane problemy