我正在尝试模拟派生自Apache Beam通用类的类,并使用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


有什么解决办法吗?
谢谢!

最佳答案

似乎在评论中找到了可以接受的答案,但我一般也建议不要通过模仿Beam DoFns等来编写测试。相反,建议是将DoFn主体中的代码分解为可以直接测试的内容(如果不平凡),或者最好在实际管道中使用DoFn并断言它会产生正确的结果(请参见https://beam.apache.org/documentation/pipelines/test-your-pipeline/)。

10-01 00:44