我有一个带有字段的类。
public class MyClass {
@Inject
DaoA daoA;
public void foo() {
Injector injector = Guice.createInjector(new DAOModule());
injector.injectMembers(this);
daoA.findEntities(); // works fine
}
}
我想模拟daoA.findEntities()
的行为,因此我在测试类中模拟了DaoA,如下所示:
@RunWith(PowerMockRunner.class)
public void MyClassTest {
@InjectMocks
MyClass myClass;
@Mock
Dao daoA;
@Test
public void test() {
PowerMockito.doReturn(Collections.emptyList()).when(daoA).findEntities();
myClass.foo(); // makes a real call while I expect a mock
}
}
在运行此测试方法时,仍然看不到模拟的行为(正在调用真实方法)。我相信injector.injectMembers(this);
会覆盖模拟的注入。当我注释掉对MyClass
的注入时,测试方法将按预期运行,但是这次实际的foo()被破坏了(由于daoA的注入未完成,它抛出了NPE)。问题是,我该如何正确注入一个字段,还要在测试方法上对其进行模拟以更改行为?