Mockito: высмеивание вызова метода типизированного класса c - PullRequest
0 голосов
/ 11 февраля 2020

Я пытаюсь смоделировать класс, производный от класса Apache Beam generi c, и вызвать его метод, используя Mockito.

Это мой настоящий класс:

    public class MyClass extends DoFn<Entity, TableRow> {

        public void processElement(ProcessContext c) {

            // some business logic

            c.output(new TableRow()) // c.output received a type defined in the derived class
        }
    }

И это тест с требуемым макетом:

DoFn<Entity, TableRow>.ProcessContext testContext = (DoFn<Entity, TableRow>.ProcessContext)mock(DoFn.ProcessContext.class);

when(textContext.output(any(TableRow.class))).thenReturn(42);

По какой-то причине я получаю сообщение об ошибке во второй строке. Это ошибка:

Required type:
T

Provided:
void

reason: no instance(s) of type variable(s) T exist so that void conforms to T

Есть решение для этого? Спасибо!

1 Ответ

2 голосов
/ 13 февраля 2020

Приемлемый ответ, кажется, можно найти в комментариях, но я бы также вообще рекомендовал не писать тесты, издавая Beam DoFns и тому подобное. Вместо этого рекомендуется либо разложить код в теле DoFn на что-то, что можно более непосредственно протестировать (если оно нетривиально), либо, предпочтительно, использовать DoFn (s) в реальном конвейере и утверждать, что он дает правильные результаты (см. https://beam.apache.org/documentation/pipelines/test-your-pipeline/).

...