2012-10-12 22 views
9

Co to jest metoda ekwiwalentu za:Metoda odpowiednik dla @InjectMocks

@Mock 
MyType1 myType1; 

@Autowired 
@InjectMocks 
MyType2 myType2; 

mogę zastąpić @Mock z mock(MyType1.class).

Ale jak mogę zastąpić @InjectMocks wywołaniem metody? Coś takiego:

injectMocks(MyType2.class) 

Odpowiedz

2

Dlaczego używając Autowired w swoim testu junit? Ponieważ kpisz sobie z zależności za MyType2, musisz znać jego implementację konkreacyjną podczas pisania testu.

Następnie nie potrzebujesz i nie należy używać Spring ani żadnego schematu wtryskowego do utworzenia instancji MyType2, którą chcesz przetestować. Utwórz go bezpośrednio w inicjalizacji testu! Wiem, że po kilku latach używania frameworków IoC, trudno jest napisać myType2 = new MyType2Impl(mock(myType1.class)), ale to naprawdę sprawi, że twoje testy będą prostsze i szybsze (ponieważ nie ma kontekstu aplikacji do kompilacji). Np .:

@Before 
public void setup() { 
    myType1 = mock(MyType1.class); 
    myType2 = new MyType2Impl(myType1); 
} 

Ale jeśli naprawdę chcesz używać IoC w badaniach JUnit użyć springockito zasugerował przez Brice i zbudować makiety MyType1 w swój kontekst aplikacji.

+1

Link nie działa. –

+0

co to jest IOC ???? – jonney

8

Brak publicznego API w Mockito do wstrzyknięcia pozorowanego. Dodatkowo, ponieważ ta adnotacja jest głównie oparta na sposobie przedstawiania rzeczy w teście, jest ona dość powiązana z fazą inicjalizacji testu.

Chociaż może się to zmienić w pewnym momencie w przyszłości.

Jednak pola z adnotacjami Mockito mogą być inicjowane przez MockitoJUnitRunner lub przez MockitoAnnotations.initMocks(). Obie tworzą fałszywe instancje i wykonują iniekcję.

Również widzę w twoim kodzie, że używasz @Autowired - stąd wiosenne, prawdopodobnie skonfigurowane przez XML. @InjectMocks nie został opracowany tak, aby działał z innymi strukturami wtrysku zależności, ponieważ rozwój był prowadzony przez przypadki użycia testów jednostkowych, a nie testy integracyjne.

Być może zechcesz rzucić okiem na springockito, który jest kolejnym projektem, który próbuje ułatwić tworzenie makiety z Mockito na wiosnę.

nadzieję, że pomoże

+0

Link nie działa. –

+1

@TarunMaganti Zaktualizowałem link. Chociaż wydaje się, że jest teraz kilka widelców springockito, myślę, że ten jest oficjalny, ale sprawdź go przed użyciem;) – Brice

Powiązane problemy