如何使用 junit 测试命令行应用程序
How to test a command line application using junit
我知道junit是专门做单元测试的,但是请看下面我的情况。
我有一个用 Java 编写的命令行应用程序,但我使用 GraalVM 为 Windows、Linux 和 Mac 编译我的应用程序的本机二进制文件。
问题是有时我的应用程序的本机二进制文件会根据所使用的操作系统而有所不同。因此,我想在所有三个操作系统上自动测试我的命令行应用程序,这样我就可以确保我很容易注意到什么时候没有按预期工作。
澄清一下,我希望我可以使用 junit(或其他测试工具)之类的东西通过使用一些参数调用我的应用程序的本机二进制文件来与我的命令行应用程序交互,然后观察打印回的文本出去。如果我的命令行应用程序打印的文本符合我的预期,那么测试通过。
同样,我知道并理解这不是 junit 的主要用例,但这是我可以让 junit 做的事情吗?如果是这样,如何?如果没有,您会推荐我看其他什么 tool/framework?
谢谢!
命令行响应测试
您可以通过 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 代码示例。
多个OS测试ENV支持
如果您不关心不同的环境,它可以通过访问构建输出资源等的本地单元测试来处理,但是由于您需要在不同的 oses 上进行测试,因此您依赖于部署和 os 以及它现在是一个系统测试(可能应该在 TestClassIT.java 集成测试的命名约定中)。
如果您只关心 OS 受 Docker 支持,那么您可以使用测试容器 运行 在本地对每个 [=] 的小 docker 图像进行测试47=],但如果您需要 Windows,这意味着您必须通过 VM 在每个 os 上构建和 运行 每个测试。
通常人们使用持续集成服务器来构建和测试 diff OSs。通常这是 Jenkins 签出 repo,然后 Jenkins 从节点提供 OSs,签出代码并编译和 运行 命令行测试。这也将有助于提供报告和仪表板工具。其他 CI/SDLC 工具也有类似的例子。 TFS 等
但是 - 如果您不想使用其他基础设施来维护您 可以 只需要一个脚本,例如。 python 连接到您控制的机器的脚本到 SSH 并将本地构建输出复制到远程机器并通过复制回完整的 junit 结果来执行和报告测试 xml 文件?在测试 运行ning?
时,您只需支付一些云图像就更便宜了
我知道junit是专门做单元测试的,但是请看下面我的情况。
我有一个用 Java 编写的命令行应用程序,但我使用 GraalVM 为 Windows、Linux 和 Mac 编译我的应用程序的本机二进制文件。 问题是有时我的应用程序的本机二进制文件会根据所使用的操作系统而有所不同。因此,我想在所有三个操作系统上自动测试我的命令行应用程序,这样我就可以确保我很容易注意到什么时候没有按预期工作。
澄清一下,我希望我可以使用 junit(或其他测试工具)之类的东西通过使用一些参数调用我的应用程序的本机二进制文件来与我的命令行应用程序交互,然后观察打印回的文本出去。如果我的命令行应用程序打印的文本符合我的预期,那么测试通过。
同样,我知道并理解这不是 junit 的主要用例,但这是我可以让 junit 做的事情吗?如果是这样,如何?如果没有,您会推荐我看其他什么 tool/framework?
谢谢!
命令行响应测试
您可以通过 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 代码示例。
多个OS测试ENV支持
如果您不关心不同的环境,它可以通过访问构建输出资源等的本地单元测试来处理,但是由于您需要在不同的 oses 上进行测试,因此您依赖于部署和 os 以及它现在是一个系统测试(可能应该在 TestClassIT.java 集成测试的命名约定中)。
如果您只关心 OS 受 Docker 支持,那么您可以使用测试容器 运行 在本地对每个 [=] 的小 docker 图像进行测试47=],但如果您需要 Windows,这意味着您必须通过 VM 在每个 os 上构建和 运行 每个测试。
通常人们使用持续集成服务器来构建和测试 diff OSs。通常这是 Jenkins 签出 repo,然后 Jenkins 从节点提供 OSs,签出代码并编译和 运行 命令行测试。这也将有助于提供报告和仪表板工具。其他 CI/SDLC 工具也有类似的例子。 TFS 等
但是 - 如果您不想使用其他基础设施来维护您 可以 只需要一个脚本,例如。 python 连接到您控制的机器的脚本到 SSH 并将本地构建输出复制到远程机器并通过复制回完整的 junit 结果来执行和报告测试 xml 文件?在测试 运行ning?
时,您只需支付一些云图像就更便宜了