我正在尝试模拟派生自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/)。