zoukankan      html  css  js  c++  java
  • JUnit 4中元数据的用法

    JUnit4已经不会霸道的要求你必须继承自TestCase了,而且测试方法也不必以test开头了,只要以@Test元数据来描述即可。
    JUnit 4中还引入了一些其他的元数据,下面一一介绍:

    import junit.framework.TestCase;
    import org.junit.After;
    import org.junit.Before;
    import org.junit.Test;
    import static org.junit.Assert.*;
    
    
    public class AddOperationTest extends TestCase{
        
          public AddOperationTest() {
          }
    
          @Before
          public void setUp() throws Exception {
          }
    
          @After
          public void tearDown() throws Exception {
          }
    
          @Test
          public void add() {
              System.out.println("add");
              int x = 0;
              int y = 0;
              AddOperation instance = new AddOperation();
              int expResult = 0;
              int result = instance.add(x, y);
              assertEquals(expResult, result);
          }
        
    }


    @Before:
    使用了该元数据的方法在每个测试方法执行之前都要执行一次。

    @After:
    使用了该元数据的方法在每个测试方法执行之后要执行一次。

    注意:@Before和@After标示的方法只能各有一个。这个相当于取代了JUnit以前版本中的setUp和tearDown方法,当然你还可以继续叫这个名字,不过JUnit不会霸道的要求你这么做了。

    @Parameters

    使用该数据元则代表下面方法返回的为参数
    public static Collection data()
    {
    return Arrays.asList(new Object[][] {{2,2},{10,10},{5,5}});
    }



    @Test(expected=*.class)
    JAVA中的异常处理也是一个重点,因此你经常会编写一些需要抛出异常的函数。那么,如果你觉得一个函数应该抛出异常,但是它没抛出,这算不算Bug呢?这当然是Bug,并JUnit也考虑到了这一点,来帮助我们找到这种Bug。例如,我们写的计算器类有除法功能,如果除数是一个0,那么必然要抛出“除0异常”。因此,我们很有必要对这些进行测试。代码如下:

     @Test(expected = ArithmeticException.class)
    
      public void divideByZero() ...{
    
    calculator.divide(0);
    
       }

    如上述代码所示,我们需要使用@Test标注的expected属性,将我们要检验的异常传递给他,这样JUnit框架就能自动帮我们检测是否抛出了我们指定的异常。



    @Test(timeout=xxx):
    该元数据传入了一个时间(毫秒)给测试方法,
    如果测试方法在制定的时间之内没有运行完,则测试也失败。

    @ignore:
    该元数据标记的测试方法在测试中会被忽略。当测试的方法还没有实现,或者测试的方法已经过时,或者在某种条件下才能测试该方法(比如需要一个数据库联接,而在本地测试的时候,数据库并没有连接),那么使用该标签来标示这个方法。同时,你可以为该标签传递一个String的参数,来表明为什么会忽略这个测试方法。比如:@lgnore(“该方法还没有实现”),在执行的时候,仅会报告该方法没有实现,而不会运行测试方法。

    @BeforeClass 和 @AfterClass

    @Before和@After,我们来看看他们是否适合完成如下功能:有一个类是负责对大文件(超过500兆)进行读写,他的每一个方法都是对文件进行操作。换句话说,在调用每一个方法之前,我们都要打开一个大文件并读入文件内容,这绝对是一个非常耗费时间的操作。如果我们使用@Before和@After,那么每次测试都要读取一次文件,效率及其低下。这里我们所希望的是在所有测试一开始读一次文件,所有测试结束之后释放文件,而不是每次测试都读文件。JUnit的作者显然也考虑到了这个问题,它给出了@BeforeClass 和 @AfterClass两个Fixture来帮我们实现这个功能。从名字上就可以看出,用这两个Fixture标注的函数,只在测试用例初始化时执行@BeforeClass方法,当所有测试执行完毕之后,执行@AfterClass进行收尾工作。在这里要注意一下,每个测试类只能有一个方法被标注为@BeforeClass 或 @AfterClass,并且该方法必须是Public和Static的。

  • 相关阅读:
    单片机成长之路(51基础篇)
    linux 目录/sys 解析
    单片机成长之路(51基础篇)
    python
    单片机成长之路(51基础篇)
    单片机成长之路(51基础篇)
    dos命令大全 黑客必知的DOS命令集合
    单片机成长之路(51基础篇)
    单片机成长之路(avr基础篇)- 003 AVR单片机的BOOT区
    单片机成长之路(51基础篇)
  • 原文地址:https://www.cnblogs.com/penghong2014/p/4281627.html
Copyright © 2011-2022 走看看