【问题标题】:How can I convert these JUnit 3 tests to JUnit 4?如何将这些 JUnit 3 测试转换为 JUnit 4?
【发布时间】:2013-07-30 14:49:14
【问题描述】:

我的公司想摆脱 JUnit 3 并开始只使用 JUnit 4。我和另一个实习生的任务是将旧的 JUnit 3 测试转换为使用 JUnit 4 约定。但是,我在转换我正在处理的测试文件时遇到问题。

据我所知,有一个 generateTest 方法返回一个 SSlTest(SSlTest 是 TestCase 的子类)。返回的 SslTest 会覆盖 runTest。 runTest 包含一个 try-catch 块,它启动两个线程,clientThread 和 serverThread(它们都是在 testfile 中定义的 Thread 的子类)。看起来实际测试是在线程内部完成的,因为 runTest 的其余部分用于捕获两个线程的异常。

generateTest 被另一个方法调用,generateSuite(返回一个TestSuite)。 generateSuite 包含一个外部 for 循环,用于将套件添加到主套件。内部 for 循环使用 generateTest 向主套件中的每个套件添加测试。主要套件是该方法返回的内容。

最后,在测试文件的 main 方法中调用的 suite() 方法中,设置了一个 while 循环以使用 generateSuite 生成套件并将它们添加到更大的套件中。


我发现的关于迁移到 JUnit 4 的唯一指南是针对更简单的测试用例。我现在很迷茫,我公司里没有其他人知道足够的 JUnit 4 来帮助我,所以任何提示都将不胜感激!

【问题讨论】:

  • 你擅长叙述代码 :) .. 你能发布代码本身吗?
  • 你说“generateTest ...返回一个SSITest”——你的意思是它返回一个类的实例吗?或者它是否为一个类编写代码?我所知道的 JUnit 3 和 4 之间的主要区别是 3 使用“test...”的约定作为其测试方法的名称,而 4 具有“@Test”注释。您没有为您的 3 种方法提及“测试...”方法;他们没有吗?他们不遵守约定,还是我遗漏了什么?
  • 1.我不确定我是否可以发布代码本身,因为它是公司代码,我不想惹上麻烦。 2. 是的,它返回一个类的实例。在 clientThread 中调用了一个“test..”方法。
  • 您是否尝试过使用 JUnit4 运行程序运行这些测试? JUnit4 相当向后兼容。
  • 是的,它适用于 JUnit 4 运行器,但我的公司希望能够停止使用 JUnit 3 jar。测试文件有以下导入:junit.framework.Test; junit.framework.TestCase; junit.framework.TestSuite; junit.textui.TestRunner,但我认为一旦我们删除了 JUnit 3 jar,我就不能使用它们中的任何一个。

标签: java unit-testing junit junit4 junit3


【解决方案1】:

我要做的第一件事就是试图说服给我任务的人这是不必要的。我知道作为实习生很难,但值得确保那个人明白这不是必需的。

令人信服的事实:

  • JUnit 4 jar 包含 junit.framework 和 org.junit 包结构,因此向后兼容。
  • JUnit 已被广泛采用。 JUnit 项目的所有者很清楚这一点,不会要求人们重写所有测试。换句话说,它们不会只是降低兼容性。
  • 实际试一试。严重地。尝试使用 JUnit 4 jar 运行现有的测试代码。您将查看是否收到任何编译器错误。如果你这样做了,这些就是要关注的领域。如果您不这样做,那么您就有充分的证据可以向给您任务的人展示。

这并不意味着您无需进行任何更改。这意味着您不必更改大部分代码。如果您有自定义运行器,您将希望使用 JUnit 4 样式。您可能还需要classpath suite 来收集测试。

将一些测试转换为 JUnit 4 也很有价值,因此团队中的开发人员可以使用一些示例。但是将它们全部转换并不是很好地利用时间。

关于无法发布代码

如果没有代码,在互联网上获得帮助是极其困难的。我可以理解您的雇主不希望您发布代码。 (但是他们可能也不希望您发布类和方法名称 - 您确实这样做了。)幸运的是,还有另一种选择。改为创建SSCCE。 (阅读链接 - 随着您的工作进展,它将对您有很大帮助。)除了更容易阅读的较小示例之外,它还允许您更改类/方法/等名称,然后您的雇主不会让他们的代码在线。

【讨论】:

    猜你喜欢
    • 2013-11-04
    • 2011-04-19
    • 1970-01-01
    • 1970-01-01
    • 2013-01-29
    • 1970-01-01
    • 2010-10-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多