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作为方法名的前缀(不是必须)

  

 

原文地址:https://www.cnblogs.com/Liuyt-61/p/10374732.html