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 によって記録されます。

したがって、私の問題は、EasyMockB.addListener()が の各テストケースで呼び出すことを期待していることですATest。これを克服するための提案があれば教えてください。ありがとう。

4

1 に答える 1

3

問題は、DI フレームワークを使用してクラスを単体テストしようとしていることにあると思います (これは常に苦痛です)。

A を自分でインスタンス化し、その過程で 8 行のコードを削除してみませんか?

于 2011-10-16T05:05:06.153 に答える