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

时间:2014-05-28 06:15:00

标签: python scala unit-testing

我有一个用Python编写的库,包含单元测试。我即将开始将功能移植到Scala以在Spark上运行并作为Android应用程序的一部分。但是我不愿意在scala中重现单元测试。

是否有一种方法可以将待编写的Scala库暴露给Python的外部询问?我可以重写测试以使用命令行界面,但我想知道是否还有其他方法。

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

2 个答案:

答案 0 :(得分:1)

您可以使用Py4J从Python调用Scala代码来执行此操作。 Py4J适用于常规的cPython解释器和is compatible with Python 3

您基本上是从Java调用Scala代码,因此您必须要了解Scala如何构建映射到Java(here's a decent summary of some of the basic conventions)。根据代码的编写方式,您可能会发现实现Java助手类更容易,该类向Scala类/应用程序公开Java友好的接口,并从Py4J调用新的Java类;这是我们为PySpark,Spark的Python API(more details here)采用的方法。

答案 1 :(得分:0)

简短回答:也许,但不要。

最终常识占了上风。我现在的目标是使用pyspark或将单元测试移植到Scala以及库的其余部分。

通过生成专门打印我想要的Scala代码,可以实现将Scala暴露给Python。然后从Python调用SBT来编译该代码并运行它并捕获stdout。 我开始在Python中模拟相同api的scala版本来创建这些自定义scala脚本,并为每个查询添加一个编译步骤,它变得非常慢。当我开始为我的Mocked Scala类考虑命令行界面或基于套接字的api时,现实陷入了困境。

要回答运行我现有的Python单元测试的实际问题,虽然我认为它仍然是可能的,但这不是一个好主意。