gpt4 book ai didi

java - 如何使用 Maven 测试 Java 控制台应用程序?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:19:47 26 4
gpt4 key购买 nike

这些测试应该在构建 jar 文件后运行。他们应该测试它是否运行,以及它是否在给定特定输入文件的情况下产生正确的控制台输出。

您能指出一些针对控制台应用程序的此类测试示例吗?这些测试是否必须用 Java 编写才能与 Maven 一起使用?

有一个类似的问题 ( Testing console based applications/programs - Java ) 但我需要的是黑盒测试,而不是单元测试。而且它没有提到 Maven。


更新:

事实证明,这很容易做到。我的第一个问题是在看到这里这么多定义后对集成测试的误解(What is Unit test, Integration Test, Smoke test, Regression Test?What's the difference between unit, functional, acceptance, and integration tests?What are unit testing and integration testing, and what other types of testing should I know about?What is an integration test exactly?)。第二个问题是,我本来不打算用Java写这些测试,但最后还是不得不学习如何使用java.lang.Runtime

首先,我已将此添加到我的 pom.xml:

<plugin>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.6</version>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>

然后我在src/test/java 中创建了一个*IT.java 文件:

public class MyAppIT {

@Test
public void test() throws IOException {
Runtime runtime = Runtime.getRuntime();
String cmd = "java -cp target/myapp.jar my.app.Main";
Process process = runtime.exec(cmd);
InputStreamReader isr = new InputStreamReader(process.getErrorStream());
BufferedReader br = new BufferedReader(isr);
Boolean containsUsage = false;
String line;
while ((line = br.readLine()) != null) {
if (line.contains("Usage")) {
containsUsage = true;
}
}
assertTrue(containsUsage);
}
}

现在我使用 mvn verify 而不是 mvn package

Results :

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0

最佳答案

看来你想要集成测试。

在许多情况下,应用程序是由持续集成 (CI) 系统构建的,例如 Hudson、Travis 或其他。此 CI 在每次提交源代码后编译并运行单元测试。编译成功后触发集成测试项目。

集成测试驻留在一个单独的 Maven 源项目中。您将像在 src/test/java 中创建普通单元测试一样创建集成测试类。当然,您不会孤立地测试单个类 - 即单元测试 - 您为集成测试设置系统(连接正确的组件)并执行所需的测试“冒烟测试”。

因此,在您的情况下,您可以为集成测试创建另一个项目,并在构建您的应用程序后执行它。您可以创建一个 Maven parent-pom 并使用子模块来避免手动集成测试构建。

测试类需要是 java 并且位于 src/test/java 中,它们看起来像普通的单元测试并且由 maven 运行。当然,您可以在该测试中启动一个非 Java 程序并断言结果。

控制台应用程序有一个“ma​​in”方法,所以我会在测试中调用 main 方法。否则,您必须运行 shell 命令或其他命令。 (通过 java.lang.Runtime)

测试控制台应用程序没有专业知识。除非你想测试用户界面 - 用户界面的自动化测试并不容易而且更难,请澄清这是否是你的重点。

关于java - 如何使用 Maven 测试 Java 控制台应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14069228/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com