从另一个 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 测试类的主要内容,如果未能解决你的问题,请参考以下文章