使用Python单元测试进行Scala测试

0 投票
2 回答
675 浏览
提问于 2025-04-18 07:47

我有一个用Python写的库,里面包含了单元测试。现在我准备把这个功能移植到Scala上,以便在Spark上运行,并作为一个Android应用的一部分。不过,我不太想在Scala中重新写这些单元测试。

有没有什么方法可以让即将编写的Scala库在Python中被外部调用呢?我可以把测试改成使用命令行接口,但我在想还有没有其他的方式。

我已经排除了Jython,因为它和我现有的Python 3库以及单元测试不兼容。

2 个回答

1

你可以试着用 Py4J 来从 Python 调用你的 Scala 代码。Py4J 可以在普通的 cPython 解释器中使用,并且 支持 Python 3

实际上,你是在从 Java 调用 Scala 代码,所以你需要对 Scala 和 Java 之间的关系有点了解(这里有一些基本的概念总结)。根据你的代码写法,你可能会发现实现一个 Java 辅助类更简单,这个类可以为你的 Scala 类或应用提供一个更适合 Java 的接口,然后通过 Py4J 调用这个新的 Java 类;这是我们在 PySpark,也就是 Spark 的 Python API 中采用的方法(更多细节在这里)。

0

简短回答: 也许可以,但别这么做。

最终,我还是选择了常识。我现在的目标是使用pyspark,或者把单元测试迁移到Scala,和库的其他部分一起。

通过生成Scala代码来打印我想要的内容,我实现了在Python中调用Scala。然后我通过SBT来编译这些代码并运行,捕获输出结果。为了创建这些自定义的Scala脚本,我开始在Python中模拟相同API的Scala版本,但每个查询都添加编译步骤,这让速度变得非常慢。当我开始考虑为我的模拟Scala类设计命令行接口或基于套接字的API时,我意识到现实的复杂性。

至于如何运行我现有的Python单元测试,虽然我觉得这可能还是可行的,但这并不是个好主意。

撰写回答