1

当我使用 EasyMock 和 Guice 框架编写测试时,我遇到了一个问题。代码如下:

class A {
    B b;

    @Inject
    public A(B b) {
        this.b = b;
        this.b.addListener(this);
    }
}

class ATest {
    @Inject
    A a;

    B b;

    class InjectionModule extends AbstractModule {
        protected void configure() {
            b = createMock(B.class);
            bind(B.class).toInstance(b);
        }
    }

    public void setUp() {
        createInjector(new InjectionModule()).injectMembers(this);
    }

    public void testSomething() {
        replay(b);
        a.doSomething();
        verify(b);
    }
}

ATest中,我将 B 实现替换为模拟对象。但是,当注入器创建 A 的实例时,B.addListener()会在A的构造函数中调用,不幸的是,即使我从未预料到,EasyMock 也会记录此调用。

因此,我的问题是 EasyMock 希望我B.addListener()在每个测试用例中调用ATest. 请给我任何建议来克服这个问题。谢谢。

4

1 回答 1

3

我认为问题在于您正在尝试使用 DI 框架对类进行单元测试(这总是很痛苦)。

为什么不自己实例化 A 并在此过程中删除 8 行代码?

于 2011-10-16T05:05:06.153 回答