详解junit

简介: 详解junit

1.概述

什么是单元测试:

单元测试,是针对最小的功能单元编写测试代码,在JAVA中最小的功能单元是方法,单元测试针对JAVA就是单个方法的测试。目的就是保证单个方法的正常运行。

JUnit是什么:

专门针对java语言设计,使用广泛的一个标准单元测试框架。使用断言+注解的方式对单个方法进行测试。注解用来控制行为,断言用来进行判断。

2.断言

名称 说明 示例
assertEquals 相等 assertEquals(100,x)
assertArrayEquals 数组相等 assertArrayEquals({1,2,3},x)
assertEquals 浮点数相等 assertEquals(3.1415926,x)
assertNull null assertNull(x)
assertTrue true assertTrue(x>0)
assertFalse false assertFalse(x<0)
assertNotEquals 不相等 assertNotEquals(100,x)
assertNotNull 不为空 assertNotNull(x)

3.常用注解

3.1.@Test

@Test,用来注解单个测试用例,每个@Test就是个独立的单元,单个@Test的生命周期是相互独立的。

代码示例:

public class Demo1Test {
    Demo1 demo1;
 
    public Demo1Test(){
        System.out.println("建立测试用例!");
    }
 
    @Before
    public void before(){
        System.out.println("测试开始!");
        demo1=new Demo1();
    }
 
    @Test
    public void testSum1(){
        Assert.assertEquals("65",demo1.sum("5",2,4,6));
    }
 
    @Test
    public void testSum2(){
        Assert.assertEquals("65",demo1.sum("5",2,4,6));
    }
 
    @After
    public void after(){
        System.out.println("测试结束!");
    }
}

测试结果:

3.2.@Before

@Before,@Test之前执行,一般用于准备一些资源。

代码示例:

public class Demo1Test {
    Demo1 demo1;
 
    @Before
    public void before(){
        demo1=new Demo1();
    }
    @Test
    public void testSum(){
        Assert.assertEquals("65",demo1.sum("5",2,4,6));
    }
}

3.3.@After

@After,@Test之后执行,一般用于释放一些资源。

代码示例:

public class Demo1Test {
    Demo1 demo1;
 
    @Before
    public void before(){
        demo1=new Demo1();
    }
    
    @Test
    public void testSum(){
        Assert.assertEquals("65",demo1.sum("5",2,4,6));
    }
    
    @After
    public void after(){
        System.out.println("测试结束!");
    }
}

3.4.@BeforeClass

@BeforeClass,作用于类层面,修饰静态方法,整个类的生命周期中,只在类的生命周期开始的时候执行一次。

一般用于准备一些所有用例共享的资源。

代码示例:

public class Demo1Test {
    Demo1 demo1;
 
    @BeforeClass
    public static void beforeClass(){
        System.out.println("beforeClass......");
    }
 
    public Demo1Test(){
        System.out.println("建立测试用例!");
    }
 
    @Before
    public void before(){
        System.out.println("测试开始!");
        demo1=new Demo1();
    }
 
    @Test
    public void testSum1(){
        Assert.assertEquals("65",demo1.sum("5",2,4,6));
    }
 
    @Test
    public void testSum2(){
        Assert.assertEquals("65",demo1.sum("5",2,4,6));
    }
 
    @After
    public void after(){
        System.out.println("测试结束!");
    }
}

运行结果:

3.5.@AfterClass

@AfterClass,作用于类层面,修饰静态方法,整个类的生命周期中,只在类的生命周期结束的时候执行一次。

一般用于销毁一些所有用例共享的资源。

代码示例:

1.public class Demo1Test {
    Demo1 demo1;
 
    @BeforeClass
    public static void beforeClass(){
        System.out.println("beforeClass......");
    }
 
    public Demo1Test(){
        System.out.println("建立测试用例!");
    }
 
    @Before
    public void before(){
        System.out.println("测试开始!");
        demo1=new Demo1();
    }
 
    @Test
    public void testSum1(){
        Assert.assertEquals("65",demo1.sum("5",2,4,6));
    }
 
    @Test
    public void testSum2(){
        Assert.assertEquals("65",demo1.sum("5",2,4,6));
    }
 
    @After
    public void after(){
        System.out.println("测试结束!");
    }
 
    @AfterClass
    public static void afterClass(){
        System.out.println("afterClass......");
    }
}

运行结果:

4.异常测试

通过@Test注解的expected属性可以断定该TestCase抛出的异常,抛出不匹配的异常会报错。

代码示例:

@Test(expected = NumberFormatException.class)
    public void testNumberFormat(){
        Integer.parseInt(null);
    }

5.超时测试

通过@Test注解的timeout属性可以设置每个TestCase执行耗时的时间阈值,超时会报错。

代码示例:

@Test(timeout = 3000)
    public void testNumberFormat(){
        try {
            Thread.sleep(4000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

6.参数化测试

Junit提供了输入一组参数进行测试的机制。

代码示例:

@RunWith(Parameterized.class)
public class ParameterTest {
    //用于准备一组数据的方法
    //方法严格约定为 public Collection<?> data()
    @Parameterized.Parameters
    public static Collection<?> data(){
        return Arrays.asList(new Object[][]{
                {0,0},{1,1},{-1,1}
        });
    }
 
    int input;
    int expected;
    //准备好的数据会在构造方法中自动传递过来
    public ParameterTest(int input,int expected){
        this.input=input;
        this.expected=expected;
    }
 
    @Test
    public void testAbs(){
        int r=Math.abs(this.input);
        Assert.assertEquals(this.expected,r);
    }
}

目录
相关文章
|
6月前
|
Java 测试技术 Android开发
Junit
Junit
68 1
|
12月前
JUnit5使用总结
JUnit5使用总结
77 0
|
Java 测试技术 Maven
PowerMock+Junit的使用
今天使用PowerMock进行单元测试,
150 0
|
测试技术
Junit 学习笔记
Junit 学习笔记
85 0
|
Java 测试技术 Spring
关于 JUnit
所谓的单元测试是测试应用程序的功能是否能够按需要正常运行,单元测试是一个对单一实体(类或方法)的测试。
135 0
|
测试技术
junit3和junit4的比较
junit3和junit4的比较
126 0
|
测试技术 Android开发 开发工具