【问题标题】:Scala Testing with Python unittests使用 Python 单元测试进行 Scala 测试
【发布时间】:2014-06-05 14:19:26
【问题描述】:

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

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

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

【问题讨论】:

  • 您图书馆的目标受众是什么?如果不是“也熟悉 Python 的 Scala 开发人员”,您可能需要重新考虑 - 考虑到单元测试的必要性,任何新的贡献者都必须了解这两种语言才能帮助您有效地开发库。
  • 这是一个非常好的观点,目标受众只是任何 Scala 开发人员。

标签: python scala unit-testing


【解决方案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)。

【讨论】:

  • 我主张尝试使用纯 pyspark,除非您有充分的理由使用 Scala——向项目中添加语言会在以后成倍增加复杂性。
【解决方案2】:

简答:也许可以,但不要。

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

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

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

【讨论】:

    猜你喜欢
    • 2013-05-23
    • 2015-10-25
    • 1970-01-01
    • 2011-09-22
    • 1970-01-01
    • 1970-01-01
    • 2012-01-08
    • 2019-07-09
    • 2010-10-18
    相关资源
    最近更新 更多