软件测试——JUnit基础

Posted 懒惰让你止步不前

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了软件测试——JUnit基础相关的知识,希望对你有一定的参考价值。

软件测试——JUnit基础

1. 综述

  之前(很久了…)说过JUnit的安装和使用,但其实没有讲JUnit的写法,今天写写JUnit的基础。

  博客链接:在Eclipse中使用JUnit4进行单元测试(初级篇)

  博客链接:在Eclipse中使用JUnit4进行单元测试(中级篇)

  博客链接:在Eclipse中使用JUnit4进行单元测试(高级篇)

 

2. JUnit基础

  一段简单的代码

 1 package testing;
 2 
 3 import static org.junit.Assert.*;
 4 import org.junit.BeforeClass;
 5 import org.junit.Test;
 6 
 7 public class TestSimple {
 8     static Simple simple;
 9     
10     @BeforeClass
11     public static void setup() {
12         simple = new Simple();
13     }
14 
15     @Test
16     public void testAdd() {
17         int sum = simple.add(1, 2);
18         assertEquals(sum, 3);
19     }
20     
21     @Test
22     public void testSub() {
23         int sub = simple.sub(3, 2);
24         assertEquals(sub, 1);
25     }
26 }

 

2.1 需要导入的包

  首先是需要导入的包,都在org.junit里,代码中需要import的有

import static org.junit.Assert.*;
import org.junit.BeforeClass;
import org.junit.Test;

  import static org.junit.Assert.*;        静态导入,含义是导入Assert类中所有的静态方法,如十分常用的assertEquals()

  import org.junit.BeforeClass;            导入使用@BeforeClass标注所需要的类

  import org.junit.Test;                       导入使用@Test标注所需要的类

  应该是每个标注的使用都要先导入对应类,这可由Eclipse自动补上,不过心中要知晓。

 

下文详情可参考链接博客的高级篇。

2.2 标注

  标注是Java的一个特性。

  常用标注代表的含义:

  @BeforeClass            在所有测试函数前运行,且一共只运行一次。总的设置工作

  @Before                在各测试函数前都运行一次

  @Test                       代表这是一个测试函数

  @After                      在各测试函数后都运行一次

  @AfterClass           在所有测试函数后运行,且一共只运行一次。总的结尾工作

  只能有一个函数被标记成@BeforeClass@AfterClass,且其必须为public static

 

  @Test(timeout = 1000)            限时1000ms的测试,超时则认为没有通过测试,可用来检测死循环

  @Test(expected =ArithmeticException.class)            预期捕获某种异常

  以上这些标注都放在函数前。

 

2.2.1 运行器Runner

  @RunWith(xxxxxx.class)          放在整个测试类前,用来选择一个运行器,不加这一句会运行默认的运行器。不同的运行器有不同的功能,下面介绍。

 

2.2.3 参数化

  这是一个很重要的特性,避免了重复的操作。

  通过以下方式实现:

  1. 在类前加标注,使用参数化运行器:@RunWith(Parameterized.class)

  2. 使用标注@Parameters,标示参数传入函数

  3. 构建构造函数,将参数传入成员变量

  4. 在测试函数中使用由传入参数赋了值的成员变量

 

package testing;

import static org.junit.Assert.*;

import java.util.Arrays;
import java.util.Collection;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;

@RunWith(Parameterized.class)
public class TestSimple {
    static Simple simple = new Simple();
    int a, b, sum;    

    @Parameters
    public static Collection data(){
        return Arrays.asList(new Object[][]{
            {1, 1, 2},
            {2, 1, 3},
            {5, 6, 11}
        });
    }
    
    // constructor, initialize the parameters
    public TestSimple(int a, int b, int sum) {
        this.a = a;
        this.b = b;
        this.sum = sum;
    }    
    
    @Test
    public void testAdd() {
        assertEquals(sum, simple.add(a, b));
    }
}

 

以上是关于软件测试——JUnit基础的主要内容,如果未能解决你的问题,请参考以下文章

基础-Junit单元测试_反射_注解

[Java基础]Junit测试

在测试之间传递JUnit数据

junit4单元测试--web项目中模拟登录会话,做全流程测试

软件测试——JUnit基础

[JUnit] JUnit5 基础 4 - Maven 集成,参数化测试,重复测试 [完]