无法通过模拟字段注入测试课程(指导)

时间:2018-12-15 13:46:49

标签: java unit-testing junit mocking guice

我有一个带有字段的类。

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)。问题是,我该如何正确注入一个字段,还要在测试方法上对其进行模拟以更改行为?

0 个答案:

没有答案