【问题标题】:Testing communications software in two different JVMs在两个不同的 JVM 中测试通信软件
【发布时间】:2023-03-04 04:04:01
【问题描述】:

我用 Java 编写了一个通过套接字进行通信的模块。我想编写一个测试发送和接收的单元测试。

为了真正测试系统,我想将发送方放在一个 JVM 中,将接收方放在另一个 JVM 中并一起测试。

从我在这里和各种博客文章中阅读的内容来看,这并不是真正的单元测试,而是集成测试。好的,很好,但我仍然希望它成为构建过程的一部分。

是否有官方推荐的方法来从 Junit 测试用例中启动第二个 JVM?如果没有,是否有另一个为此设计的标准测试框架?

【问题讨论】:

  • 你是用maven构建的吗?或者什么构建工具?
  • 是的,使用 Maven。
  • 什么样的错误导致您想要从构建中运行真正的集成测试这一激烈的步骤。是否可以通过自动代码检查找到?有现成的工具,但有时 grep 就足够了。或者你可以编写一个程序来检查你的代码......

标签: java unit-testing junit integration-testing


【解决方案1】:

我在构建中使用了一些 shell 脚本。不知道如何验证结果,但是在您的自动构建中运行 Maven 的任何东西都可以检查一些输出文件或其他东西。在 build/plugins 我这样做:

<plugin>
    <artifactId>exec-maven-plugin</artifactId>
    <groupId>org.codehaus.mojo</groupId>
    <version>1.3.2</version>
    <executions>
        <execution>
            <id>Validate English and Term Customization</id>
            <phase>test</phase>
            <goals><goal>exec</goal></goals>
            <configuration>
                <executable>${project.basedir}/validate.sh</executable>
                <workingDirectory>${project.basedir}</workingDirectory>
            </configuration>
        </execution>
    </executions>
</plugin>

您实际上将不得不创建一个单独的项目来通过网络部署和测试您的代码。这在很多方面都会很痛苦。您可能会认为“集成测试”和“多方面的痛苦”在某种程度上是同义词。

使集成测试保持最新可能是世界上进行更好的单元测试的最佳灵感。我仍然会尽可能地尝试进行单元测试。

  • 将您的单元测试放在与您正在测试的代码不同的包中,以确保您没有访问任何包范围内的内容。
  • 每次在 2 台服务器上出现问题时,请在修复错误之前非常努力地编写一个在构建中失败的单元测试,然后验证它在修复后是否通过。
  • 如果您愿意排除足够多的东西,通常可以进行彻底的单元测试。以我的经验来说,费尽心力将事情排除在外,比使用一个完全独立(但完全依赖)的项目来进行单元测试要容易得多,如果它不工作就会破坏你的构建。
  • 您能否使用代码检查工具(现成的、grep/sed 脚本或自定义程序)而不是集成测试来发现这些错误?我更愿意看到你从你的构建中运行它。

即使您的构建中有一个完全独立的集成测试项目,您也可能希望每周运行一次/天一次,而不是每次签入。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多