从另一个 JUnit 测试类运行 JUnit 测试类

Posted

技术标签:

【中文标题】从另一个 JUnit 测试类运行 JUnit 测试类【英文标题】:Running JUnit test classes from another JUnit test class 【发布时间】:2011-01-30 04:50:36 【问题描述】:

我有两个要测试的类(我们称它们为 ClassA 和 ClassB)。每个都有自己的 JUnit 测试类(分别为 testClassA 和 testClassB)。

ClassA 的正常运行依赖于 ClassB,因此我想确保 ClassB 在运行 testClassA 之前通过其测试(否则 testClassA 的结果将毫无意义)。

最好的方法是什么?在这种情况下,它是一个作业,所以如果可能的话,我需要将它保留在两个指定的测试类中。

如果 testClassB 的测试没有全部通过,我可以/应该从 testClassA 抛出异常吗?这将要求 testClassB 以不可见的方式运行,并且只向 testClassA 报告其成功/失败,而不是向 GUI(通过 JUnit)报告。

我正在使用 Eclipse 和 JUnit 4.8.1

更新:到目前为止,我管理的最好的是一个带有测试套件的单独文件,如下所示。这仍然不是我所追求的,因为如果 ClassA 未能通过某些测试,它仍然允许运行 ClassB 测试。

import org.junit.runner.RunWith;
import org.junit.runners.Suite;

@RunWith(Suite.class)
@Suite.SuiteClasses(testClassA.class, testClassBCode.class)
public class testClassB 

【问题讨论】:

【参考方案1】:

您的单元测试不应依赖于其他测试。

解决问题的一种方法是在 ClassA 的测试中模拟 ClassB,以便独立于 ClassB 的测试结果来测试其行为。

我建议你试试mockito!

【讨论】:

在这种情况下,因为这是一项作业,我不能依赖我的讲师有 mockito - 基本上他们只是要将我的 Java 包复制到他们的项目中,在我的课程上运行他们的测试,并在他们的课程上运行我的测试。 (为了将来的参考,显然我想知道处理这些事情的最佳方法)。虽然它可能并不理想,但目前我只是在寻找一种方式(如果存在的话)说 //don't run this test unless ClassB has passed its tests 而不必依赖测试人员看到我的评论。 我不认为你可以在 JUnit 中做到这一点。您可以使用 JUnit、TestNG 或其他测试框架的 OrderedSuite 插件来指定测试顺序。【参考方案2】:

你应该试试testng 框架,它允许这种依赖测试。

【讨论】:

正如之前的评论:这是一个作业,JUnit 测试是一个要求。

以上是关于从另一个 JUnit 测试类运行 JUnit 测试类的主要内容,如果未能解决你的问题,请参考以下文章

Maven 和 JUnit 5:在一个类中运行单个测试

JUnit:通过 eclipse 和 maven 测试运行。速度差别很大,为啥?

如何一次运行我所有的内部类junit测试

使用命令行从 JUnit 类运行单个测试

运行 JUnit 测试时找不到类异常

junit运行多个测试的方法