【发布时间】:2013-03-18 19:23:42
【问题描述】:
我正在使用 Mockito 编写单元测试,但在模拟注入的类时遇到问题。问题是两个注入的类是相同的类型,并且仅通过它们的@Qualifier 注释来区分。如果我试图简单地模拟SomeClass.class,则不会注入该模拟,并且在我的测试中该对象是null。我怎样才能模拟这些对象?
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);
}
}
【问题讨论】:
-
你的测试代码是什么样子的?我总是明确地调用
Mockito.mock(SomeClass.class)来创建我的模拟,将注释提供的任何魔法都排除在我的单元测试之外。如果您通过构造函数或设置器注入依赖项,您应该也可以这样做。有充分的理由不是这样吗? -
您能否演示在不使用@InjectMocks 的情况下注入这些依赖项?我更新了我的 Q 以展示我的测试是如何设置的。
-
当所有希望都失败时,您可以随时使用 powermock 注入私有字段。以下链接后面有明确的指南:stackoverflow.com/questions/36173947/…
标签: mockito