junit4单元測试总结
junit4单元測试总结
本文开发环境为myeclipse10.7
1. 准备工作
1.1. 选择须要单元測试的文件
创建mavenproject。右击须要单元測试的文件,选择New->other,选择Junit Test Case;
1.2. 选择Junit 4
代码放到src/test/java
1.3. 选择单元測试函数
加入Junit 4 引用
1.4. 生成test文件
2. 開始測试
2.1. 測试单个函数
方法1:鼠标选到带測试函数名上。右击,Run As Junit Test;
方法2:在Junit View里选择要測试的函数。右击Run;
2.2. 測试整个类
方法1:鼠标选到类上,右击。Run As Junit Test;
方法2:在Junit View里选择要測试的类。右击Run;
3. 经常使用技巧
3.1. 经常使用注解
在junit中经常使用的注解有@Test、@Ignore、@BeforeClass、@AfterClass、@Before、@After、@Runwith、@Parameters
JUnit4的測试类不用再继承TestCase类了。使用注解会方便非常多。
|
@Before |
初始化方法 |
|
@After |
释放资源 |
|
@Test |
測试方法。在这里能够測试期望异常和超时时间 |
|
@Ignore |
忽略的測试方法 |
|
@BeforeClass |
针对全部測试,仅仅运行一次。且必须为static void |
|
@AfterClass |
针对全部測试。仅仅运行一次。且必须为static void |
|
@RunWith |
指定測试类使用某个执行器 |
|
@Parameters |
指定測试类的測试数据集合 |
|
@Rule |
同意灵活加入或又一次定义測试类中的每一个測试方法的行为 |
|
@FixMethodOrder |
指定測试方法的运行顺序 |
一个JUnit 4 的单元測试用例运行顺序为:
@BeforeClass –> @Before –> @Test –> @After –> @AfterClass
每个測试方法的调用顺序为:
@Before –> @Test –> @After
3.1.1. @Test
@Test注解的publicvoid方法将会被当做測试用例
JUnit每次都会创建一个新的測试实例。然后调用@Test注解方法
不论什么异常的抛出都会觉得測试失败
@Test注解提供2个參数:
1。“expected”,定义測试方法应该抛出的异常,假设測试方法没有抛出异常或者抛出了一个不同的异常,測试失败
2,“timeout”。假设測试执行时间长于该定义时间,測试失败(单位为毫秒)
[java] view
plaincopy
1. public class MathTest {
2.
@Test(expected=Exception.class)
3. public void testAdd() throws Exception{
4.
throw new Exception();
5. }
6.
}
[java] view
plaincopy
1. public class MathTest {
2.
)
3. public void testAdd() {
4.
for(;;){
5.
6.
}
7. }
8.
}
3.1.2. @Before
当编写測试方法时。常常会发现一些方法在运行前须要创建同样的对象
使用@Before注解一个publicvoid 方法会使该方法在@Test注解方法被运行前运行(那么就能够在该方法中创建同样的对象)
父类的@Before注解方法会在子类的@Before注解方法运行前运行
3.1.3. @After
假设在@Before注解方法中分配了额外的资源,那么在測试运行完后。须要释放分配的资源。
使用@After注解一个publicvoid方法会使该方法在@Test注解方法运行后被运行
即使在@Before注解方法、@Test注解方法中抛出了异常,全部的@After注解方法依旧会被运行,见演示样例
父类中的@After注解方法会在子类@After注解方法运行后被运行
3.1.4. @BeforeClass
有些时候,一些測试须要共享代价高昂的步骤(如数据库登录),这会破坏測试独立性,一般是须要优化的
使用@BeforeClass注解一个publicstatic void 方法,而且该方法不带不论什么參数,会使该方法在全部測试方法被运行前运行一次。而且仅仅运行一次
父类的@BeforeClass注解方法会在子类的@BeforeClass注解方法运行前运行
3.1.5. @AfterClass
假设在@BeforeClass注解方法中分配了代价高昂的额外的资源。那么在測试类中的全部測试方法运行完后,须要释放分配的资源。
使用@AfterClass注解一个publicstatic void方法会使该方法在測试类中的全部測试方法运行完后被运行
即使在@BeforeClass注解方法中抛出了异常。全部的@AfterClass注解方法依旧会被运行
父类中的@AfterClass注解方法会在子类@AfterClass注解方法运行后被运行
3.1.6. @Ignore
对包括測试类的类或@Test注解方法使用@Ignore注解将使被注解的类或方法不会被当做測试运行
JUnit运行结果中会报告被忽略的測试数
[java] view
plaincopy
1. public class MathTest {
2.
@Ignore("do not test")
3. @Test
4.
public void testAdd() {
5. Math m = new Math();
6.
assertTrue(m.add(, ) == );
7. }
8.
}
[java] view
plaincopy
1. @Ignore
2.
public class MathTest {
3. @Test
4.
public void testAdd() {
5. Math m = new Math();
6.
assertTrue(m.add(, ) == );
7. }
8.
}
运行结果同样:
3.2. 制定运行顺序
JUnit4.11之后提供了MethodSorters,能够有三种方式对test运行顺序进行指定,例如以下:
/**
* Sorts the test methods by the methodname, in lexicographic order, with {@link Method#toString()} used as a
tiebreaker
*/
NAME_ASCENDING(MethodSorter.NAME_ASCENDING),
/**
* Leaves the test methods in the orderreturned by the JVM. Note that the order from the JVM may vary from run to run
*/
JVM(null),
/**
* Sorts the test methods in adeterministic, but not predictable, order
*/
DEFAULT(MethodSorter.DEFAULT);
能够小试牛刀一下:
3.2.1. 使用DEFAULT方式
默认使用一个确定的,但不可预測的顺序
package com.netease.test.junit;
import org.apache.log4j.Logger;
import org.junit.FixMethodOrder;
import org.junit.Test;
import org.junit.runners.MethodSorters;
/**
* User: hzwangxx
* Date: 14-3-31
* Time: 15:35
*/
@FixMethodOrder(MethodSorters.DEFAULT)
public
class TestOrder {
private static final Logger LOG = Logger.getLogger(TestOrder.class);
@Test
public void testFirst()
throws Exception{
LOG.info("------1--------");
}
@Test
public void testSecond()
throwsException {
LOG.info("------2--------");
}
@Test
public void testThird()
throwsException {
LOG.info("------3--------");
}
}
/*
output:
2014-03-3116:04:15,984 0 [main] INFO - ------1--------
2014-03-3116:04:15,986 2 [main] INFO - ------3--------
2014-03-3116:04:15,987 3 [main] INFO - ------2--------
*/
3.2.2. 按字母排序
依据測试方法的方法名排序,依照词典排序规则(ASC,从小到大,递增)。
package com.netease.test.junit;
import org.apache.log4j.Logger;
import org.junit.FixMethodOrder;
import org.junit.Test;
import org.junit.runners.MethodSorters;
/**
* User: hzwangxx
* Date: 14-3-31
* Time: 15:35
*/
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public
class TestOrder {
private static final Logger LOG = Logger.getLogger(TestOrder.class);
@Test
public void testFirst()
throwsException {
LOG.info("------1--------");
}
@Test
public void testSecond()
throwsException {
LOG.info("------2--------");
}
@Test
public void testThird()
throws Exception{
LOG.info("------3--------");
}
}
/*
2014-03-3116:10:25,360 0 [main] INFO - ------1--------
2014-03-3116:10:25,361 1 [main] INFO - ------2--------
2014-03-3116:10:25,362 2 [main] INFO - ------3--------
*/
3.3. 经常使用断言
断言是编写測试用例的核心实现方式,即期望值是多少,測试的结果是多少,以此来推断測试是否通过。
|
assertArrayEquals(expecteds, actuals) |
查看两个数组是否相等。 |
|
assertEquals(expected, actual) |
查看两个对象是否相等。类似于字符串比較使用的equals()方法 |
|
assertNotEquals(first, second) |
查看两个对象是否不相等。 |
|
assertNull(object) |
查看对象是否为空。 |
|
assertNotNull(object) |
查看对象是否不为空。 |
|
assertSame(expected, actual) |
查看两个对象的引用是否相等。类似于使用“==”比較两个对象 |
|
assertNotSame(unexpected, actual) |
查看两个对象的引用是否不相等。类似于使用“!=”比較两个对象 |
|
assertTrue(condition) |
查看执行结果是否为true。 |
|
assertFalse(condition) |
查看执行结果是否为false。 |
|
assertThat(actual, matcher) |
查看实际值是否满足指定的条件 |
|
fail() |
让測试失败 |
4. 常见问题
4.1. java.lang.ClassNotFoundException
右击项目,Run As Maven Test。等待test完毕就不报该错误了。
junit4单元測试总结的更多相关文章
- method initializationerror not found:JUnit4单元測试报错问题
今天使用JUnit 4进行单元測试时,測试程序一直执行不起来,报method initializationerror not found错误.例如以下: 网上说版本 ...
- Spring MVC Junit4 单元測试 JunitTest
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSmVyb21lX3M=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA ...
- 在Eclipse中使用JUnit4进行单元測试(0基础篇)
本文绝大部分内容引自这篇文章: http://www.devx.com/Java/Article/31983/0/page/1 我们在编写大型程序的时候,须要写成千上万个方法或函数,这些函数的功能可能 ...
- 菜鸟学Java(二十一)——怎样更好的进行单元測试——JUnit
測试在软件生命周期中的重要性,不用我多说想必大家也都很清楚.软件測试有许多分类,从測试的方法上可分为:黑盒測试.白盒測试.静态測试.动态測试等:从软件开发的过程分为:单元測试.集成測试.确认測试.验收 ...
- maven多module项目中千万不要引入其它模块的单元測试代码
本文出处:http://blog.csdn.net/chaijunkun/article/details/35796335,转载请注明. 因为本人不定期会整理相关博文,会对对应内容作出完好. 因此强烈 ...
- (4.5.4)Android測试TestCase单元(Unit test)測试和instrumentationCase单元測试
Android单元和instrumentation单元測试 Developing Android unit and instrumentation tests Android的单元測试是基于JUnit ...
- 使用maven运行单元測试总结
maven本身没有单元測试框架,可是maven的default生命周期的test阶段绑定了maven-surefire-plugin插件,该插件能够调用Junit3.Junit4.TestNG等Jav ...
- 利用Continuous Testing实现Eclipse环境自己主动单元測试
当你Eclipse环境中改动项目中的某个方法时,你可能因为各种原因没有执行单元測试,结果代码提交,悲剧就可能随之而来. 所幸infinitest(http://infinitest.github.io ...
- C语言单元測试
C语言单元測试 对于敏捷开发来说,单元測试不可缺少,对于Java开发来说,JUnit非常好,对于C++开发,也有CPPUnit可供使用,而对于传统的C语言开发,就没有非常好的工具可供使用,能够找到的有 ...
随机推荐
- iOS 动画整理
序列帧动画 曾经项目里的一段源码: 1234567891011121314 UIImageView * activityImageView = [[UIImageView alloc] init];N ...
- Java易错知识点(2) - 在读取Cookie时除了Key,Value是得不到其他信息的
全文总结: 在读取Cookie,然后操作时,除了getName(),getValue()外,不要妄图得到其他信息,如下方法不会得到值的: cookie.getMaxAge(); cookie.getD ...
- js判断对象为空
http://www.jb51.net/article/42713.htm var isEmptyValue = function(value) { var type; if(value == nul ...
- 【 LVS 】类型及算法
一.概念: LVS( linux virtual server ) : Linux虚拟服务器 lvs是一个负载均衡设备,它不提供任何服务,用户请求到这里的时候,它将客户需求转发至后端的realserv ...
- 解决vim没有颜色的办法
首先打开vim,输入命令 scriptnames看看vim加载了哪些脚本. :scriptnames 输出入下 : /home/users/xxx/.vimrc : /home/users/xxx/t ...
- ccf-I’m stuck!
给定一个R行C列的地图,地图的每一个方格可能是'#', '+', '-', '|', '.', 'S', 'T'七个字符中的一个,分别表示如下意思: '#': 任何时候玩家都不能移动到此方格: ' ...
- tushrea知识笔记
生成时间序列: dates = pandas.date_range('2013-01-01',periods = 6) Pandas读取excel数据: df=pd.read_excel(" ...
- Selenium2+python自动化44-元素定位参数化(find_element)【转载】
前言 元素定位有八种方法,这个能看到这一篇的小伙伴都知道了,那么有没有一种方法,可以把八种定位合为一种呢?也就是把定位的方式参数化,如id,name.css等设置为一个参数,这样只需维护定位方式的参数 ...
- [转]CreateDIBitmap与CreateDIBSection
首先明确最主要区别:CreateDIBitmap创建的是设备相关位图句柄 - HBITMAP. CreateDIBSection创建的是设备 ...
- 详解ListView加载网络图片的优化,让你轻松掌握!
详解ListView加载网络图片的优化,让你轻松掌握! 写博客辛苦了,转载的朋友请标明出处哦,finddreams(http://blog.csdn.net/finddreams/article/de ...