Java和JUnit,查找缺少的@Test decorators

Java和JUnit,查找缺少的@Test decorators,java,testing,junit,decorator,Java,Testing,Junit,Decorator,假设我们有一个充满单元测试(数千个)的项目,它们都应该是这样的 @Test public void testExceptionInBla() { // some test } 但有一次,有人忘了在测试的顶部放一个@Test装饰器 不需要手动查看所有代码,哪种方法更容易发现这些测试 我想找到这样的代码,这是一个没有@test的测试: public void testExceptionInBla() { // some test } 我是你们,我会在这里查看一些Sonnar规则,我发

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

@Test
public void testExceptionInBla() {
   // some test
}
但有一次,有人忘了在测试的顶部放一个@Test装饰器

不需要手动查看所有代码,哪种方法更容易发现这些测试

我想找到这样的代码,这是一个没有@test的测试:

public void testExceptionInBla() {
   // some test
}

我是你们,我会在这里查看一些Sonnar规则,我发现一些可能符合要求的东西:

但有一次,有人忘了把@Test装饰器放在 测试

我想找到这样的代码,这是一个没有@test的测试:

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

@Test
注释方法,或者在方法名称中指定
Test
前缀,如果开发人员忘记了这样做,其后果大致相同。
如果
@Test
是今天的方式,那就不是机会。
@Test
注释在
Test
前缀上带来了两个真正的优势:

1) 它在编译测试时被检查。例如,
@Tast
将引发编译错误,而
tastawhen…()
不会

2)
@Test
使测试方法名称更具可读性:它允许使用函数式语言关注场景。
should_-throw_-exception_-if-blabla()
听起来比
test_-should_-exception_-if-blabla()
更有意义

关于您的问题:如何确保有效地执行测试,我将以另一种方式考虑。通常,您希望确保单元测试的执行覆盖了应用程序源代码的最低级别(而若有必要,您可以在包或类级别进行) 这就是覆盖工具完成这项工作的目标(例如Jacoco)。 如果属于某个包的类的覆盖级别未至少覆盖指定的最低级别(),则甚至可以添加规则以使生成失败


小加:
如果您确实确保对测试方法进行了正确的注释,那么您有一种方法:
1) 您必须为测试方法选择约定:例如,测试类中的所有实例和非私有方法都是测试方法。
2) 创建一个Sonar规则,用于检索测试类的所有非私有实例方法,并确保所有这些方法都用
@test


3) 将该规则添加到声纳规则中

我将创建一个perl或python脚本,列出当前或上一行不包含
@Test
的所有
/\stest[a-Z]/
事件。这个列表应该足够小,可以访问并修复所有这些问题。这似乎是我最容易实现的选项。使用声纳。