Tôi đang viết các bài kiểm tra đơn vị sử dụng Mockito và tôi đang gặp sự cố chế nhạo các lớp được chèn vào. Vấn đề là hai trong số các lớp được tiêm cùng loại và chỉ được phân biệt bằng chú thích @Qualifier
của chúng. Nếu tôi cố gắng chỉ đơn giản là giả SomeClass.class
, mô phỏng đó không được tiêm và đối tượng đó là null
trong các thử nghiệm của tôi. Làm thế nào tôi có thể thử các đối tượng này?Chế nhạo hai đối tượng cùng loại với 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);
}
}
Làm thế nào để mã kiểm tra của bạn trông như thế nào? Tôi luôn gọi một cách rõ ràng là “Mockito.mock (SomeClass.class)” để tạo ra các mocks của tôi, tránh việc kiểm tra đơn vị của tôi bất kỳ phép thuật nào được cung cấp bởi các chú thích. Bạn sẽ có thể làm như vậy, nếu bạn tiêm phụ thuộc của bạn thông qua constructor hoặc setters. Có lý do chính đáng nào không phải vậy? – rcomblen
Bạn có thể chứng minh việc tiêm các phụ thuộc này mà không cần sử dụng @InjectMocks không? Tôi đã cập nhật câu hỏi của mình để minh họa cách thử nghiệm của tôi được thiết lập. – tamuren