Как вы тестируете реализацию ForeachWriter? - PullRequest
0 голосов
/ 11 января 2019

Я пытался настроить некоторые модульные тесты, чтобы проверить логику в пользовательской реализации ForeachWriter, но столкнулся с проблемой насмешек / дублирования.

Я хотел бы смоделировать внедренную зависимость в ForeachWriter, но мои макеты, похоже, дублируются во время выполнения. Первоначально я думал, что ложные зависимости не вызывались, но во время проверки отладки я обнаружил, что существует несколько их версий (основанных на hashCode).

Вот небольшой пример кода того, что я пытался сделать:

//Class I'd like to test
public class TestForeachSink extends ForeachWriter<String> {

    @Inject
    SomeDependency dep;

    public TestForeachSink(SomeDependency dep) {
        this.dep = dep;
    }

    @Override
    public boolean open(long partitionId, long version) {
        dep.doSomethingStartupRelatedOrThrow();
        return true;
    }

    @Override
    public void process(String value) {
        dep.processSomething(value);
    }

    @Override
    public void close(Throwable errorOrNull) {
        dep.closeConnections();
    }
}

//Testing Class
public class TestForeachSinkTests {

    @Mock SomeDependency _dep;
    TestForeachSink target;

    @BeforeEach
    public void init() {
        _dep = mock(SomeDependency.class, withSettings().serializable());
        target = new TestForeachSink(_dep);
    }

    @Test
    pubic void shouldVerifyDependencyInteractions() {
        //setup stream, add data to it
       stream.toDS().writeStream().foreach(target).start().processAllAvailable();

       //VERIFY INTERACTIONS WITH MOCK HERE
    }
}

Добавленные данные проходят через поток, как и ожидалось, но похоже, что макет, который я передал в SomeDependency, заменяется во время выполнения копией. Я думаю , что имеет смысл, если выполнение выполняется так, как если бы оно выполнялось на отдельном работнике, но я все же хотел бы иметь возможность протестировать ForeachWriter.

Кто-нибудь еще тестирует эту часть кода? Я не сталкивался с какими-либо другими тестами для пользовательских реализаций ForeachSink, но руководство по продвижению было бы очень полезно!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...