在两个不同的JVM中测试通信软件

时间:2017-02-09 17:10:32

标签: java unit-testing junit integration-testing

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

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

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

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

1 个答案:

答案 0 :(得分: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脚本或自定义程序)而不是集成测试来查找这些错误?我宁愿看到你从你的构建中运行它。

即使你有一个完整的独立集成测试项目,你也可能希望每周一次/每周运行一次,而不是每次办理登机手续。