【问题标题】:How to test a command line application using junit如何使用 junit 测试命令行应用程序
【发布时间】:2021-12-23 02:26:34
【问题描述】:

我了解 junit 专门用于单元测试,但请在下面阅读我的情况。

我有一个用 Java 编写的命令行应用程序,但我使用 GraalVM 为 Windows、Linux 和 Mac 编译我的应用程序的本机二进制文件。 问题是,有时我的应用程序的本机二进制文件的行为会因所使用的操作系统而有所不同。正因为如此,我想在所有三个操作系统上自动测试我的命令行应用程序,这样我就可以确保我很容易注意到什么时候没有按预期工作。

澄清一下,我希望我可以使用类似 junit(或其他一些测试工具)的工具来与我的命令行应用程序进行交互,方法是使用一些参数调用我的应用程序的本机二进制文件,然后观察打印出的文本。如果我的命令行应用程序打印的文本符合我的预期,则测试通过。

再次,我知道并理解这不是 junit 的主要用例,但这是我可以让 junit 做的事情吗?如果是这样,怎么做?如果不是,您会推荐我看哪些其他工具/框架?

谢谢!

【问题讨论】:

标签: java testing junit automated-tests


【解决方案1】:

命令行响应测试

您可以通过 java 测试代码 Running command manually with java (using cmd.exe) 包含对已部署应用程序的调用测试 https://mkyong.com/java/how-to-execute-shell-command-from-java/

我注意到 Picoli(命令行支持库)提供了一些关于测试的建议https://picocli.info/#_black_box_and_white_box_testing

JUnit 允许您执行任何 Java,因此您的测试代码可以使用上述 Java 代码示例。

多操作系统测试 ENV 支持

如果您不关心不同的环境,则可以通过访问构建输出资源等的本地单元测试来处理它。但是由于您需要在不同的 ose 上进行测试,那么您也依赖于部署和操作系统,因此它现在是一个系统测试(可能应该在 TestClassIT.java 集成测试的命名约定中)。

如果您只关心 Docker 支持的操作系统,那么您可以使用测试容器在每个操作系统的小型 docker 映像中本地运行您的测试,但如果您需要 Windows,这意味着您必须通过以下方式在每个操作系统上构建和运行每个测试虚拟机。

通常人们使用持续集成服务器在不同的操作系统上构建和测试。通常这是由 Jenkins 签出 repo,然后由 Jenkins 从节点提供操作系统、签出代码并编译和运行命令行测试。这也将有助于提供报告和仪表板工具。其他 CI/SDLC 工具也有类似的,例如。 TFS 等

但是 - 如果您不想拥有其他基础设施来维护您可以只需要一个脚本,例如。 python脚本连接到您控制的机器到SSH并将本地构建输出复制到远程机器并通过复制完成的junit结果xml文件来执行和报告测试?更便宜的是,您只需在测试运行时支付一些云映像?

【讨论】:

  • 谢谢!这就是我一直在寻找的。 ?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-15
  • 1970-01-01
相关资源
最近更新 更多