您的位置:首页 > 其它

单元测试

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.*;

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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  单元测试 junit