如何验证多个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测试的整体执行?的主要内容,如果未能解决你的问题,请参考以下文章