如何验证多个JUnit 4测试的整体执行?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何验证多个JUnit 4测试的整体执行?相关的知识,希望对你有一定的参考价值。

期望:“测试的测试”

想象一下,在测试类完成所有测试之后,可以执行一些其他的“健全性检查”,这将表明整个测试执行是否成功执行。最终的健全性检查可能会使用有关测试的一些汇总信息。就像一个粗略的例子一样:计算对共享方法的调用次数,如果在所有测试完成后计数不超过某个最小预期阈值,则即使所有单独的测试都通过,也很明显出了问题。 >

我所描述的可能是在最佳实践的“灰色区域”中,因为尽管它确实违反了

原子单元测试的学说,但最终的健全性检查实际上并不是测试所测试的类;相反,它正在检查整个测试执行是否成功:可以这么说的“测试测试”。这是关于测试本身的附加逻辑。

此解决方案似乎很糟糕

完成此“测试测试”的一种方法是将健全性检查置于静态@AfterClass方法中。如果检查失败,则可以调用实际起作用的Assert.fail()(令人惊讶的是,因为我想只能在带有@Test注释的方法中调用该方法,该方法本质上必须是实例方法,而不是静态方法):

public class MyTest {

   [...]

    @AfterClass
    public static void testSufficientCount() {
        if (MyTest.counterVariable < MIN_COUNT) {
            Assert.fail("This fail call actually works. Wow.");
        }
    }

}

有许多原因导致此解决方案陷入困境:

  • 假设总共有N个测试(其中“测试”是用@Test注释的实例方法)。当在Assert.fail()中调用@AfterClass时,IDE将按预期报告总计N个测试。但是,当在Assert.fail()中调用@AfterClass时,IDE会总共报告N + 1测试(多余的一项是静态@AfterClass方法)。附加的静态方法用[@Test注释为not,因此不应将其视为测试。此外,测试总数不应取决于某些测试是否通过。@AfterClass方法根据定义是静态的。因此,只能访问静态成员。这给我的具体情况带来了问题;我将不加赘述,因为解释超出了问题的范围,但是如果仅使用实例成员,则基本上是最可取的。
  • [还有其他原因...]
  • 有更好的方法吗?

    是否有一种方法可以实施公认的良好实践“测试”? JUnit 4是否支持添加某种逻辑以确保正确执行某个类中的一组单元测试(如果未成功则以某种方式失败)?我称之为“测试测试”的东西有这个名字吗?

[期望:一个“测试的测试”,想像一下,在测试类完成所有测试之后,还可以执行一些其他的“健全性检查”,这将表明整个测试是否执行...

答案
关于可变数量的测试

我认为没有有效的解决方案...

以上是关于如何验证多个JUnit 4测试的整体执行?的主要内容,如果未能解决你的问题,请参考以下文章

Java测试工具使用--Junit

Junit 单元测试类

如何对记录器中的消息执行 JUnit 断言

如何在Junit测试中运行Jmeter线程组

单元测试

单元测试利器 JUnit 4