zoukankan      html  css  js  c++  java
  • junit 基础使用

    junit百度百科:

      JUnit是一个Java语言的单元测试框架。它由Kent Beck和Erich Gamma建立,逐渐成为源于Kent Beck的sUnit的xUnit家族中最为成功的一个。 JUnit有它自己的JUnit扩展生态圈。多数Java的开发环境都已经集成了JUnit作为单元测试的工具。

      JUnit是由 Erich Gamma 和 Kent Beck 编写的一个回归测试框架(regression testing framework)。Junit测试是程序员测试,即所谓白盒测试,因为程序员知道被测试的软件如何(How)完成功能和完成什么样(What)的功能。

      Junit是一套框架,继承TestCase类,就可以用Junit进行自动测试了。

    junit作用:

      我们知道 Junit 是一个单元测试框架,那么使用 Junit 能让我们快速的完成单元测试。

      通常我们写完代码想要测试这段代码的正确性,那么必须新建一个类,然后创建一个 main() 方法,然后编写测试代码。如果需要测试的代码很多呢?那么要么就会建很多main() 方法来测试,要么将其全部写在一个 main() 方法里面。这也会大大的增加测试的复杂度,降低程序员的测试积极性。而 Junit 能很好的解决这个问题,简化单元测试,写一点测一点,在编写以后的代码中如果发现问题可以较快的追踪到问题的原因,减小回归错误的纠错难度。

    junit用法:

      使用IDEA创建project时将自动导入junit框架。在文件目录能够看到在src目录下包含着main和test文件夹

      

    编写需要测试的用例:

     1 public class Calculator {
     2      
     3     /**
     4      * 传入两个参数,求和
     5      * @param a
     6      * @param b
     7      * @return
     8      */
     9     public int add(int a,int b){
    10         return a+b;
    11     }
    12      
    13     /**
    14      * 传入两个参数,求差
    15      * @param a
    16      * @param b
    17      * @return
    18      */
    19     public int sub(int a,int b){
    20         return a-b;
    21     }
    22  
    23 }

    不用junit编写测试类:

     1 public class CalculatorTest {
     2  
     3     public static void main(String[] args) {
     4         Calculator c = new Calculator();
     5 
     6         //测试 add()方法
     7         int result = c.add(1, 2);
     8         if(result == 3){
     9             System.out.println("add()方法正确");
    10         }
    11 
    12         //测试 sub()方法
    13         int result2 = c.sub(2, 1);
    14         if(result2 == 1){
    15             System.out.println("sub()方法正确");
    16         } 
    17     }
    18 }

    那么我们可以看到,不用 Junit 只能写在 main()方法中,通过运行结果来判断测试结果是否正确。这里需要测试的只有两个方法,如果有很多方法,那么测试代码就会变得很混乱。

    使用junit编写测试类:

     1 public class CalculatorTest {
     2      
     3     @Test
     4     //测试 add()方法
     5     public void testAdd(){
     6         Calculator c = new Calculator();
     7         int result = c.add(1, 2);
     8         Assert.assertEquals(result, 3);
     9     }
    10      
    11     @Test
    12     //测试 sub()方法
    13     public void testSub(){
    14         Calculator c = new Calculator();
    15         int result = c.sub(2, 1);
    16         Assert.assertEquals(result, 1);
    17     }
    18 }

    那么由上面可以看到,使用 Junit 不需要创建 main() 方法,而且每个测试方法一一对应,逻辑特别清晰。可能有读者会问,这样写代码量也并不会减少啊,那么你接着往下看:

    首先介绍 Junit 的几种类似于 @Test 的注解:

      1.@Test: 测试方法

        a)(expected=XXException.class)如果程序的异常和XXException.class一样,则测试通过
        b)(timeout=100)如果程序的执行能在100毫秒之内完成,则测试通过

      2.@Ignore: 被忽略的测试方法:加上之后,暂时不运行此段代码

      3.@Before: 每一个测试方法之前运行

      4.@After: 每一个测试方法之后运行

      5.@BeforeClass: 方法必须必须要是静态方法(static 声明),所有测试开始之前运行,注意区分before,是所有测试方法

      6.@AfterClass: 方法必须要是静态方法(static 声明),所有测试结束之后运行,注意区分 @After

     那么上面的例子,我们可以看到,每个 @Test 方法中都有 Calculator c = new Calculator();即类的实例化,那么我们可以将其放入到 @Before 中

     1 public class CalculatorTest {
     2     Calculator c = null;
     3      
     4     @Before
     5     public void testBeforeClass(){
     6         c = new Calculator();
     7     }
     8     @Test
     9     //测试 add()方法
    10     public void testAdd(){
    11         int result = c.add(1, 2);
    12         //Assert.assertEquals(result, 3);
    13         //等价于:
    14         if(result == 3){
    15             System.out.println("add()方法正确");
    16         }
    17     }
    18      
    19     @Test
    20     //测试 sub()方法
    21     public void testSub(){
    22         int result = c.sub(2, 1);
    23         //Assert.assertEquals(result, 1);
    24         //等价于:
    25         if(result == 1){
    26             System.out.println("sub()方法正确");
    27         }
    28     }
    29  
    30 }

    同理:别的注解用法我们用一个类来看:

     1 public class JunitTest {
     2     public JunitTest() {
     3         System.out.println("构造函数");
     4     }
     5  
     6     @BeforeClass
     7     public static void beforeClass(){
     8         System.out.println("@BeforeClass");
     9     }
    10      
    11     @Before
    12     public void befor(){
    13         System.out.println("@Before");
    14     }
    15      
    16     @Test
    17     public void test(){
    18         System.out.println("@Test");
    19     }
    20      
    21     @Ignore
    22     public void ignore(){
    23         System.out.println("@Ignore");
    24     }
    25      
    26     @After
    27     public void after(){
    28         System.out.println("@After");
    29     }
    30      
    31     @AfterClass
    32     public static void afterClass(){
    33         System.out.println("@AfterClass");
    34     }
    35 }

    结果:

    1 @BeforeClass
    2 构造函数
    3 @Before
    4 @Test
    5 @After
    6 @AfterClass

    注意:编写测试类的原则: 

       ①测试方法上必须使用@Test进行修饰

            ②测试方法必须使用public void 进行修饰,不能带任何的参数

            ③新建一个源代码目录来存放我们的测试代码,即将测试代码和项目业务代码分开

            ④测试类所在的包名应该和被测试类所在的包名保持一致

            ⑤测试单元中的每个方法必须可以独立测试,测试方法间不能有任何的依赖

            ⑥测试类使用Test作为类名的后缀(不是必须)

            ⑦测试方法使用test作为方法名的前缀(不是必须)

      

     

  • 相关阅读:
    禁用生成8.3字符长文件名解决单目录存储大量文件写入性能下降问题
    遭遇EventSystem服务问题
    软件工程师遭遇硬件故障RAID5两块硬盘离线
    Pocket Player睡眠定时器不能选择问题的解决办法
    借助RamDisk让你的FireFox飞起来
    NVS4200M显卡“超频”
    Python数据类型
    Python变量
    端口及对应服务
    Python基础(1)
  • 原文地址:https://www.cnblogs.com/Liuyt-61/p/10374732.html
Copyright © 2011-2022 走看看