Java和JUnit,查找缺少的@Test装饰器

zpqajqem  于 11个月前  发布在  Java
关注(0)|答案(2)|浏览(115)

假设我们有一个项目充满了单元测试(上千个),它们都应该是这样的

@Test
public void testExceptionInBla() {
   // some test
}

但是在一个案例中,有人忘记在测试的顶部放一个@Test装饰器。
有什么简单的方法可以发现这些测试,而不需要手动查看所有代码?
我想找到这样的代码,这是一个没有@Test的测试:

public void testExceptionInBla() {
   // some test
}
ndasle7k

ndasle7k1#

我是你,我会看看一些声纳规则在这里,我发现一些东西,可能可以匹配的要求:
https://rules.sonarsource.com/java/RSPEC-2187

rggaifut

rggaifut2#

但是在一个案例中,有人忘记在测试的顶部放一个@Test装饰器。

我想找到这样的代码,这是一个没有@Test的测试:
public void testExceptionInBla() { // some test }
@Test注解方法或在方法名中指定test前缀,如果开发人员忘记这样做,后果是一样的。
如果@Test是今天的方式,这不是机会。
@Test注解在test前缀上带来了两个真实的优势:
1)在编译测试时检查它。例如,@Tast会引发编译错误,而tastWhen...()不会。
2)@Test使测试方法的名称更直接易读:它允许使用函数式语言来关注场景。should_throw_exception_if_blabla()听起来比test_should_throw_exception_if_blabla()更有意义。
关于您的问题:如何确保测试被有效地执行,我会从另一个Angular 来看待。一般来说,您希望确保单元测试执行覆盖应用程序源代码的最低级别(如果有意义的话,您可以在包或类级别进行)。
这就是覆盖工具的目标(例如Jacoco)来完成这项工作。如果属于某个包的类的覆盖级别没有达到指定的最低级别(look at that post),您甚至可以添加规则来使构建失败。
小添加:
如果你真的确保测试方法被正确地注解,你有一种方法:
1)你必须为测试方法选择一个约定:例如,测试类中的所有示例方法和非私有方法都是测试方法。
2)创建一个Sonar规则,检索测试类的所有非私有示例方法,并确保所有这些方法都使用@Test进行注解。
3)把这条规则加到你的声纳规则里。

相关问题