• Test @Test注解与继承TestCase混用问题及原因


    前言
    在作单元测试的时候,可能使用@Test注解执行一个测试用例,或者测试类继承junit.framework.TestCase,方法名为test前缀执行测试用例,如下:

    1. 使用@Test注解

    public class Junit4Test {

    @Test
    public void testX() {
    Assert.assertEquals(0, 0);
    }
    }
    2. 继承TestCase

    public class Junit3Test extends TestCase {

    public void testX() {
    assertEquals(0, 0);
    }
    }
    @Test注解与TestCase的区别

    继承TestCase:Junit3的方式,方法名以test为前缀

    @Test注解:Junit4的方式,方法上使用注解@Test

    p.s. :Junit4为了兼容性,jar包里打包的有Junit3的代码

    混合使用及可能问题和原因
    示例代码如下:

    public class JunitTest extends TestCase {

    @Test
    public void testX() {
    assertEquals(0, 0);
    }
    }
    有一些不清楚的同学刚用的时候,可能会这样使用(如不清楚原理,代码模仿等),优点也有,比如使用断言方法不用静态的导入org.junit.Assert类,因为直接继承了TestCase类。

    使用错觉:执行的时候可能认为是@Test注解的原因支持测试用例的执行。

    实际上在我本地测试的时候,这种方式都是以Junit3的方式运行,比如再定义个方法,方法名不以test开头:

    public class JunitTest extends TestCase {

    @Test
    public void testX() {
    assertEquals(0, 0);
    }
    @Test
    public void xx() {
    assertEquals(0, 0);
    }
    }
    方法xx无法作为测试用例执行的,即使使用了注解@Test,但不符合Junit3的使用规范,所以@Test注解实际是不生效的。

    当然,很多时候即使新手,也可能都会遵守以test作为前缀的方法命名,一般不会发现这个问题。

    但是在使用Junit4的一些能力的时候,会发现结果不预期,比如使用@Before、@BeforeClass等注解不生效。注意这些是属于Junit4的。按照Junit3的方式当然会不支持(包括@Test注解的异常测试等能力)。

    所以,如果出现Junit4的注解不生效的时候,可以检查是否因为继承TestCase而使用了Junit3方式测试的原因导致。

    如果还想使用Junit4的能力,依然继承TestCase类的时候(可能如文中说的,可能继承它的一些断言方法)或者是其它外力原因不可更改,可以在测试类上加上注解@RunWith(JUnit4.class)显式指定使用Junit4。如下:

    @RunWith(JUnit4.class)
    public class JunitTest extends TestCase {

    @Test
    public void testX() {
    assertEquals(0, 0);
    }
    @Test
    public void xx() {
    assertEquals(0, 0);
    }
    }
    这样就可以按预期的使用Junit4的能力执行测试用例。
    ————————————————
    版权声明:本文为CSDN博主「不识君的荒漠」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/x763795151/article/details/89218868

  • 相关阅读:
    论文阅读 | ExtremeNet:Bottom-up Object Detection by Grouping Extreme and Center Points
    论文阅读 | CornerNet:Detecting Objects as Paired Keypoints
    论文阅读 | FPN:Feature Pyramid Networks for Object Detection
    关于字符串 “*****AB**C*D*****” 中前缀、后缀和中间 '*' 的处理
    #include< > 和 #include” ” 的区别
    小朋友排队
    核桃的数量
    操作格子
    字串统计
    关联矩阵
  • 原文地址:https://www.cnblogs.com/frankcui/p/15944550.html
Copyright © 2020-2023  润新知