Junit 使用--高级篇

1、Junit常用注解

@Test
最常用,标明这是一个测试方法,方法的返回值必须是void,并且不能有任何参数
示例:
@Test
public void testAdd() {
double result = arithUtil.add(1, 3);
assertEquals(4, result,0);
}
方法:
assertEquals(double expected, double actual, double delta)
expected—表示期望值
actual—表示实际值
delta—表示期望值与实际值间允许误差,
最开始我用方法assertEquals(double expected, double actual)
始终验证失败,原因是这个方法已经过期,若使用此方法源码中直接进入到fail(“”)方法中

这里写图片描述
我们在测试的时候使用的一系列assertEquals方法来自包”import static org.junit.Assert.*;”。大家注意一下,这是一个静态包含(static),是JDK5中新增添的一个功能。也就是说,assertEquals是Assert类中的一系列的静态方法,一般的使用方式是Assert. assertEquals(),但是使用了静态包含后,前面的类名就可以省略了,使用起来更加的方便。

@Test(expected=ArithmeticException.class)检查被测方法是否抛出ArithmeticException异常
测试异常时使用,比如你觉得一个函数应该抛出异常,但是它没抛出,这也算是bug
@Test(expected=ArithmeticException.class)
public void testDivDoubleDoubleInt() {
double result = 0;
result = arithUtil.div(10, 0, 2);
assertEquals(3.33, result,0);
}
当抛出ArithmeticException时,测试通过。否则测试失败

@Test(timeout=1000 )
限时测试时使用
给这些测试方法设定一个执行时间,超过了这个时间,他们就会被系统强行终止,并且系统还会向你汇报该函数结束的原因是因为超时
测试方法遇到死循环时用此注解比较好

@Before
进入到测试方法之前,执行改注解标注的方法,一般是实例化对象,加载配置文件、将对象复原等

@After
测试方法执行后,执行改注解标注的方法,一般是销毁对象

@Ignore
表示方法暂不参与测试,一般需测试的方法未完成时,做此标注,当方法完成后,将标注去除即可

@BeforeClass
针对所有测试,只执行一次,且必须为public static void

@AfterClass
针对所有测试,只执行一次,且必须为public static void

@RunWith(class)
例如:@RunWith(SpringJUnit4ClassRunner.class)
在 JUnit 中有很多个 Runner ,他们负责调用测试代码,你要根据需要选择不同的 Runner 来运行你的测试代码。JUnit 中有一个默认 Runner ,如果你没有指定,那么系统自动使用默认 Runner 来运行你的代码。
要想指定一个 Runner ,需要使用 @RunWith 标注,并且把你所指定的 Runner 作为参数传递给它。另外一个要注意的是, @RunWith 是用来修饰类的,而不是用来修饰函数的。只要对一个类指定了 Runner ,那么这个类中的所有函数都被这个 Runner 来调用。

执行顺序

一个JUnit4的单元测试用例执行顺序为:
@BeforeClass -> @Before -> @Test -> @After -> @AfterClass

每一个测试方法的调用顺序为:
@Before -> @Test -> @After

所有标识为@AfterClass的方法都一定会被执行,即使在标识为@BeforeClass的方法抛出异常的的情况下也一样会。
所有标识为@After 的方法都一定会被执行,即使在标识为 @Before 或者 @Test 的方法抛出异常的的情况下也一样会。
@BeforeClass 和 @AfterClass 对于那些比较“昂贵”的资源的分配或者释放来说是很有效的,因为他们只会在类中被执行一次。相比之下对于那些需要在每次运行之前都要初始化或者在运行之后 都需要被清理的资源来说使用@Before和@After同样是一个比较明智的选择

参数化测试

你可能遇到过这样的函数,它的参数有许多特殊值,或者说他的参数分为很多个区域。比如,一个对考试分数进行评价的函数,返回值分别为“优秀,良好,一般,及格,不及格”,因此你在编写测试的时候,至少要写 5 个测试,把这 5 中情况都包含了,这确实是一件很麻烦的事情。
为了简化类似的测试, JUnit4 提出了“参数化测试”的概念,只写一个测试函数,把这若干种情况作为参数传递进去,一次性的完成测试。
注意:
参数化测试需指定RunWith为:Parameterized. class
这里写图片描述
代码标注:
这里写图片描述

import static org.junit.Assert.assertEquals;

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 ArithUtilParamsTest {

    private ArithUtil arithUtil = new ArithUtil();

    private double params1;

    private double params2;

    private double result;

    @Test
    public void testAdd() {
        double ceshiResult = arithUtil.add(params1, params2);
        assertEquals(result,ceshiResult,0.5);
    }

    public  ArithUtilParamsTest( double  param1, double  param2 ,double  result)  {
        this.params1  =  param1;
        this.params2  =  param2;
        this.result  =  result;
    } 

    @Parameters
    public static Collection data(){
         return  Arrays.asList( new  Object[][] {
             { 2 , 1,  3 } ,

             { 3 , 4, 7 } ,

             { 5 , 5, 10 } ,
         } );
    }
}

打包测试

通过前面的介绍我们可以感觉到,在一个项目中,只写一个测试类是不可能的,我们会写出很多很多个测试类。可是这些测试类必须一个一个的执行,也是比较麻烦的事情。鉴于此, JUnit 为我们提供了打包测试的功能,将所有需要运行的测试类集中起来,一次性的运行完毕,大大的方便了我们的测试工作。

这里写图片描述

参考:http://blog.csdn.net/andycpp/article/details/1329218

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值