Junit 使用--高级篇
来源:互联网 发布:五级网络 编辑:程序博客网 时间:2024/06/05 14:44
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
- Junit 使用--高级篇
- ant junit 高级使用
- Junit高级
- Junit 使用-初级篇
- Java高级JUnit、注解
- junit 使用
- junit使用
- junit 使用
- junit 使用
- Junit使用
- JUnit使用
- 使用JUnit
- Junit使用
- Junit使用
- junit 使用
- Junit使用
- junit使用
- junit使用
- 跳转拨号盘,输入字符方案
- POJ3292——Semi-prime H-numbers
- Java 中常用的数据源
- Android 通过java代码实现修改指定路径文件的读写权限。
- linux 数据盘分区并挂载
- Junit 使用--高级篇
- 102. Binary Tree Level Order Traversal
- cocoaPods "xxxx is not used in any concrete target"
- 【操作系统】CentOS 7 jdk下载及安装教程
- appium java环境搭建及demo
- Java变量以及内存分配(非常重要)
- 华为解锁BL
- bzoj 1176(cdq分治)
- Android面试总论