Mock框架在单元测试中使用依赖注入框架

时间:2011-10-16 04:10:04

标签: guice easymock roboguice

当我使用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。请给我任何克服这一点的建议。感谢。

1 个答案:

答案 0 :(得分:3)

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

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