单元测试
2016-05-09 18:57
363 查看
今儿接触JUnit测试框架,发现测试工具非常有用。不说别的,能帮助我自动生成测试代码,而且省去了手动测试时main函数调用各个方法的麻烦事。我使用的是JUnit Test case不知道另一个JUnit Test Suite是干嘛用的。
在开发中,对于自己开发的模块,只有在通过单元测试之后,才能提交到 SVN 库 或者 Git 库。
正是由于测试在开发中的重要地位,才会在IT界刮起了 TDD 的旋风。TDD,也就是测试驱动开发模式。它旨在强调在开发功能代码之前,先编写测试代码。也就是说在明确要开发某个功能后,首先思考如何对这个功能进行测试,并完成测试代码的编写,然后编写相关的代码满足这些测试用例。然后循环进行添加其他功能,直到完成全部功能的开发。
好像Test Suite很复杂的样子,来,让大叔好好关照他。
public class TestSuite1 {
public static Test suite() {
TestSuite suite = new TestSuite("Test for package1");
suite.addTest(new JUnit4TestAdapter(Test1.class));
suite.addTest(new JUnit4TestAdapter(Test2.class));
suite.addTest(new JUnit4TestAdapter(Test3.class));
suite.addTest(new JUnit4TestAdapter(TestSuite2.class));
return suite;
}
}
来源: <http://blog.csdn.net/listeningsea/article/details/7667103>
一个例子就懂了,就是组合测试,据说用了compose模式。
JUnit3 和JUnit4区别,我看着就是JUnit3使用继承,JUnit4使用注解。
回到了我开始调用包的问题,我从Maven上下了两个包,junit-4.12.jar和hamcrest-all-1.3.jar。前者是java单元测试包,后者是干嘛用的。大叔告诉你,开始遗留问题,不得不查,否则就成历史遗留问题了。hamcrest是:
Hamcrest 是一个测试的框架,它提供了一套通用的匹配符 Matcher,灵活使用这些匹配符定义的规则,程序员可以更加精确的表达自己的测试思想,指定所想设定的测试条件。结合testng或其他测试工具,可以写出更为简洁的test。如下例子
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.*;
import junit.framework.TestCase;
public class BiscuitTest extends TestCase {
public void testEquals() {
Biscuit theBiscuit = new Biscuit("Ginger");
Biscuit myBiscuit = new Biscuit("Ginger");
assertThat(theBiscuit, equalTo(myBiscuit));
}
}
来源: <http://blog.csdn.net/shrekmu/article/details/3018392>
大叔又想到了,assert啥啥啥的,到底有哪几种?于是开始搜。。。
在静态类junit.framework.Assert或者静态类org.junit.Assert中存在以下几个方法
1.assertTrue/False([String
message,]boolean condition);
判断一个条件是true还是false。感觉这个最好用了,不用记下来那么多的方法名。
2.fail([String
message,]);
失败,可以有消息,也可以没有消息。
3.assertEquals([String
message,]Object expected,Object actual);
判断是否相等,可以指定输出错误信息。
第一个参数是期望值,第二个参数是实际的值。
这个方法对各个变量有多种实现。在JDK1.5中基本一样。
但是需要主意的是float和double最后面多一个delta的值,可能是误差范围,不确定这个 单词什么意思,汗一个。
4.assertNotNull/Null([String
message,]Object obj);
判读一个对象是否非空(非空)。
5.assertSame/NotSame([String
message,]Object expected,Object actual);
判断两个对象是否指向同一个对象。看内存地址。
7.failNotSame/failNotEquals(String
message, Object expected, Object actual)
当不指向同一个内存地址或者不相等的时候,输出错误信息。
来源: <http://blog.sina.com.cn/s/blog_44d19b500102vf5f.html>
前面不是提到hamcrest和JUnit的产物assertThat吗,那么有什么强大的地方呢?
import
static
org.hamcrest.Matchers.*;
来源: <http://www.tuicool.com/articles/aErQjiF>
在开发中,对于自己开发的模块,只有在通过单元测试之后,才能提交到 SVN 库 或者 Git 库。
正是由于测试在开发中的重要地位,才会在IT界刮起了 TDD 的旋风。TDD,也就是测试驱动开发模式。它旨在强调在开发功能代码之前,先编写测试代码。也就是说在明确要开发某个功能后,首先思考如何对这个功能进行测试,并完成测试代码的编写,然后编写相关的代码满足这些测试用例。然后循环进行添加其他功能,直到完成全部功能的开发。
好像Test Suite很复杂的样子,来,让大叔好好关照他。
public class TestSuite1 {
public static Test suite() {
TestSuite suite = new TestSuite("Test for package1");
suite.addTest(new JUnit4TestAdapter(Test1.class));
suite.addTest(new JUnit4TestAdapter(Test2.class));
suite.addTest(new JUnit4TestAdapter(Test3.class));
suite.addTest(new JUnit4TestAdapter(TestSuite2.class));
return suite;
}
}
来源: <http://blog.csdn.net/listeningsea/article/details/7667103>
一个例子就懂了,就是组合测试,据说用了compose模式。
JUnit3 和JUnit4区别,我看着就是JUnit3使用继承,JUnit4使用注解。
回到了我开始调用包的问题,我从Maven上下了两个包,junit-4.12.jar和hamcrest-all-1.3.jar。前者是java单元测试包,后者是干嘛用的。大叔告诉你,开始遗留问题,不得不查,否则就成历史遗留问题了。hamcrest是:
Hamcrest 是一个测试的框架,它提供了一套通用的匹配符 Matcher,灵活使用这些匹配符定义的规则,程序员可以更加精确的表达自己的测试思想,指定所想设定的测试条件。结合testng或其他测试工具,可以写出更为简洁的test。如下例子
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.*;
import junit.framework.TestCase;
public class BiscuitTest extends TestCase {
public void testEquals() {
Biscuit theBiscuit = new Biscuit("Ginger");
Biscuit myBiscuit = new Biscuit("Ginger");
assertThat(theBiscuit, equalTo(myBiscuit));
}
}
来源: <http://blog.csdn.net/shrekmu/article/details/3018392>
大叔又想到了,assert啥啥啥的,到底有哪几种?于是开始搜。。。
在静态类junit.framework.Assert或者静态类org.junit.Assert中存在以下几个方法
1.assertTrue/False([String
message,]boolean condition);
判断一个条件是true还是false。感觉这个最好用了,不用记下来那么多的方法名。
2.fail([String
message,]);
失败,可以有消息,也可以没有消息。
3.assertEquals([String
message,]Object expected,Object actual);
判断是否相等,可以指定输出错误信息。
第一个参数是期望值,第二个参数是实际的值。
这个方法对各个变量有多种实现。在JDK1.5中基本一样。
但是需要主意的是float和double最后面多一个delta的值,可能是误差范围,不确定这个 单词什么意思,汗一个。
4.assertNotNull/Null([String
message,]Object obj);
判读一个对象是否非空(非空)。
5.assertSame/NotSame([String
message,]Object expected,Object actual);
判断两个对象是否指向同一个对象。看内存地址。
7.failNotSame/failNotEquals(String
message, Object expected, Object actual)
当不指向同一个内存地址或者不相等的时候,输出错误信息。
来源: <http://blog.sina.com.cn/s/blog_44d19b500102vf5f.html>
前面不是提到hamcrest和JUnit的产物assertThat吗,那么有什么强大的地方呢?
import
static
org.hamcrest.Matchers.*;
import static org.junit.Assert.assertThat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.junit.Before;
import org.junit.Test;
import com.lyh.share.model.User;
public class UserDaoTest {
private User test1;
private User test2;
@Before
public void init(){
test1 = new User();
test1.setUsername( "tt1" );
test1.setPassword( "123" );
test1.setShares( );
test2 = new User();
test2.setUsername( "tt2" );
test2.setPassword( "321" );
test2.setShares( );
}
@Test
public void findUser(){
/**数值匹配**/
//测试变量是否大于指定值
assertThat(test1.getShares(), greaterThan( ));
//测试变量是否小于指定值
assertThat(test1.getShares(), lessThan( ));
//测试变量是否大于等于指定值
assertThat(test1.getShares(), greaterThanOrEqualTo( ));
//测试变量是否小于等于指定值
assertThat(test1.getShares(), lessThanOrEqualTo( ));
//测试所有条件必须成立
assertThat(test1.getShares(), allOf(greaterThan( ),lessThan( )));
//测试只要有一个条件成立
assertThat(test1.getShares(), anyOf(greaterThanOrEqualTo( ), lessThanOrEqualTo( )));
//测试无论什么条件成立(还没明白这个到底是什么意思)
assertThat(test1.getShares(), anything());
//测试变量值等于指定值
assertThat(test1.getShares(), is( ));
//测试变量不等于指定值
assertThat(test1.getShares(), not( ));
/**字符串匹配**/
String url = "http://www.taobao.com" ;
//测试变量是否包含指定字符
assertThat(url, containsString( "taobao" ));
//测试变量是否已指定字符串开头
assertThat(url, startsWith( "http://" ));
//测试变量是否以指定字符串结尾
assertThat(url, endsWith( ".com" ));
//测试变量是否等于指定字符串
assertThat(url, equalTo( "http://www.taobao.com" ));
//测试变量再忽略大小写的情况下是否等于指定字符串
assertThat(url, equalToIgnoringCase( "http://www.taobao.com" ));
//测试变量再忽略头尾任意空格的情况下是否等于指定字符串
assertThat(url, equalToIgnoringWhiteSpace( "http://www.taobao.com" ));
/**集合匹配**/
List<User> user = new ArrayList<User>();
user.add(test1);
user.add(test2);
//测试集合中是否还有指定元素
assertThat(user, hasItem(test1));
assertThat(user, hasItem(test2));
/**Map匹配**/
Map<String,User> userMap = new HashMap<String,User>();
userMap.put(test1.getUsername(), test1);
userMap.put(test2.getUsername(), test2);
//测试map中是否还有指定键值对
assertThat(userMap, hasEntry(test1.getUsername(), test1));
//测试map中是否还有指定键
assertThat(userMap, hasKey(test2.getUsername()));
//测试map中是否还有指定值
assertThat(userMap, hasValue(test2));
}
}
来源: <http://www.tuicool.com/articles/aErQjiF>
相关文章推荐
- Ruby单元测试框架TestUnit的替代者MiniTest介绍
- Android学习笔记之应用单元测试实例分析
- 详解Spring Boot Junit单元测试
- 我的Node.js学习之路(四)--单元测试
- Android编程单元测试实例详解(附源码)
- Android编程之单元测试实例分析
- Android应用开发中单元测试分析
- mstest实现类似单元测试nunit中assert.throws功能
- java编程之单元测试(Junit)实例分析(附实例源码)
- JUnit中获取测试类及方法的名称实现方法
- 对Python的Django框架中的项目进行单元测试的方法
- python单元测试unittest实例详解
- angularjs中的单元测试实例
- Python中unittest模块做UT(单元测试)使用实例
- 程序员方面对于测试的一些实践介绍
- SpringMVC 单元测试
- Android单元测试 笔记
- 使用 Spring 进行单元测试
- 对Python的Django框架中的项目进行单元测试的方法
- JUnit注解与hamcrest