目录

1.概述

2.断言

3.常用注解

3.1.@Test

3.2.@Before

3.3.@After

3.4.@BeforeClass

3.5.@AfterClass

4.异常测试

5.超时测试

6.参数化测试

1.概述

什么是单元测试:

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

JUnit是什么:

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

2.断言

名称说明示例assertEquals相等assertEquals(100,x)assertArrayEquals数组相等assertArrayEquals({1,2,3},x)assertEquals浮点数相等assertEquals(3.1415926,x)assertNullnullassertNull(x)assertTruetrueassertTrue(x>0)assertFalsefalseassertFalse(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);

}

}

 

 

推荐阅读

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: