假设我们有一个项目充满了单元测试(上千个),它们都应该是这样的
@Test public void testExceptionInBla() { // some test }
但是在一个案例中,有人忘记在测试的顶部放一个@Test装饰器。有什么简单的方法可以发现这些测试,而不需要手动查看所有代码?我想找到这样的代码,这是一个没有@Test的测试:
public void testExceptionInBla() { // some test }
ndasle7k1#
我是你,我会看看一些声纳规则在这里,我发现一些东西,可能可以匹配的要求:https://rules.sonarsource.com/java/RSPEC-2187
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)把这条规则加到你的声纳规则里。
@Test
test
@Tast
tastWhen...()
should_throw_exception_if_blabla()
test_should_throw_exception_if_blabla()
2条答案
按热度按时间ndasle7k1#
我是你,我会看看一些声纳规则在这里,我发现一些东西,可能可以匹配的要求:
https://rules.sonarsource.com/java/RSPEC-2187
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)把这条规则加到你的声纳规则里。