详解junit

目录

1.概述

2.断言

3.常用注解

3.1.@Test

3.2.@Before

3.3.@After

3.4.@BeforeClass

3.5.@AfterClass

4.异常测试

5.超时测试

扫描二维码关注公众号,回复: 16303207 查看本文章

6.参数化测试


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,作用于类层面,修饰静态方法,整个类的生命周期中,只在类的生命周期结束的时候执行一次。

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

代码示例:

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);
    }
}

 

猜你喜欢

转载自blog.csdn.net/Joker_ZJN/article/details/132388711
今日推荐