apache-spark - 你如何对 ForeachWriter 实现进行单元测试?
问题描述
我一直在尝试设置一些单元测试来验证 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 自定义实现的测试,但是非常感谢您的前进方向!
解决方案
推荐阅读
- c++ - 使用 ODBC 读取/写入 excel
- angular - 数据出现在 API 调用中,但在调用时未定义
- java - Spring Boot 应用程序日志显示 iRAv2 格式日志
- json - 如何在我的代码中找到 TypeError 的位置?
- javascript - D3 线性刻度 NaN
- excel - 每张 Excel 行数
- tableau-api - 用户可以隐藏 Tableau 中的列吗?
- xml - 使用 XSLT 1.0 转换 Xml
- powerbi - 在 PowerBI 中显示不包括周末的前几天销售额
- java - recyclerView.setAdapter(适配器); 不工作