Фреймворк работает с фреймворком внедрения зависимостей в модульном тесте - PullRequest
1 голос
/ 16 октября 2011

Когда я пишу тесты с помощью EasyMock и Guice framework, я сталкиваюсь с проблемой.Код выглядит так:

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 Ответ

3 голосов
/ 16 октября 2011

Я думаю, что проблема в том, что вы пытаетесь выполнить модульное тестирование класса с использованием DI-фреймворка (что всегда болезненно).

Почему бы вам не создать экземпляр A самостоятельно и в процессе удалить8 строк кода?

...