Ich schreibe Komponententests mit Mockito und ich habe Probleme, die injizierten Klassen zu verspotten. Das Problem besteht darin, dass zwei der eingefügten Klassen vom gleichen Typ sind und nur durch ihre @Qualifier
Annotation unterschieden werden. Wenn ich versuchte, einfach zu spotten SomeClass.class
, wird dieser Schein nicht injiziert und dieses Objekt ist null
in meinen Tests. Wie kann ich diese Objekte verspotten?Spott zwei Objekte des gleichen Typs mit Mockito
public class ProfileDAL {
@Inject
@Qualifier("qualifierA")
private SomeClass someClassA ;
@Inject
@Qualifier("qualifierB")
private SomeClass someClassB ;
//...various code, not important
}
@RunWith(MockitoJUnitRunner.class)
public class ProfileDALLOMImplTest {
@InjectMocks
private ProfileDALLOMImpl profileDALLOMImpl = new ProfileDALLOMImpl();
@Mock
private SomeClass someClassA;
@Mock
private SomeClass someClassB;
private SomeResult mockSomeResult = mock(SomeResult.class);
@Test
public void testSomeMethod() {
when(someClassA .getSomething(any(SomeArgment.class)).thenReturn(mockSomeResult);
Int result = profileDALLOMImpl.someTest(This isn't relevant);
}
}
Wie sieht Ihr Test-Code aussehen? Ich rufe immer explizit 'Mockito.mock (SomeClass.class)' 'an, um meine Mocks zu erstellen, und halte aus meinen Unit-Tests jede Magie heraus, die durch Anmerkungen bereitgestellt wird. Sie sollten in der Lage sein, dasselbe zu tun, wenn Sie Ihre Abhängigkeiten über Konstruktor oder Setter injizieren. Gibt es einen guten Grund, warum es nicht so ist? – rcomblen
Könnten Sie möglicherweise zeigen, dass diese Abhängigkeiten ohne die Verwendung von @InjectMocks injiziert werden? Ich habe mein Q aktualisiert, um zu demonstrieren, wie mein Test aufgebaut ist. – tamuren