之前项目中用到一个Hamcrest ,为了扩展junit的测试功能,使用了该包
http://hamcrest.org/JavaHamcrest/
此包 功能还是比较多的。
总结如下"
1)与 assertThat 配合使用
2)instanceOf, isCompatibleType --测试类型的
3)notNullValue,nullValue --测试null值
4)sameInstance --测试对象实例
5)Beans ->hasProperty -- 测试JaveBean属性
6)可以测集合类
7)可以测数字
closeTo- 测浮点数接近给定值
greaterThan,lessThan,
8)可以测文本
containsString, startsWith, endsWith 测试字符串匹配
package test.junitdemo.util;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import static org.hamcrest.Matchers.*;
import junit.framework.TestCase;;
public class TestCalcuate {
Calcuate cal;
@Before
public void setUp(){
cal = new Calcuate();
}
@Test(timeout = 30)
public void testAdd(){
// try {
// Thread.sleep(500);
// } catch (InterruptedException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
int rel = cal.add(20, 10);
TestCase.assertEquals("加法有问题",rel, 30);
}
@Test(timeout = 30)
public void testMinus(){
int rel = cal.minus(20, 10);
TestCase.assertEquals("减法法有问题",rel, 10);
}
@Test(timeout = 30)
public void testMul(){
int rel = cal.mul(20, 10);
TestCase.assertEquals("乘法法有问题",rel, 200);
}
@Test
public void testDivide(){
int rel;
cal.divide(20, 0);
rel= cal.divide(20, 10);
TestCase.assertEquals("除法有问题",rel, 2);
}
@Test
public void testHamcrest(){
//try {
Assert.assertThat(50,allOf(greaterThan(20),lessThan(60)));
//} catch (Exception e) {
// TODO Auto-generated catch block
// e.printStackTrace();
//}
}
@After
public void tearDown(){
cal = null;
}
}
在写的过程中遇到一个问题,JUnit总是run不过去,后来几经努力,发现原来是 引用顺序的问题
java.lang.SecurityException: class "org.hamcrest.Matchers"'s signer information does not match signer information of other classes in the same package
at java.lang.ClassLoader.checkCerts(ClassLoader.java:898)
at java.lang.ClassLoader.preDefineClass(ClassLoader.java:668)
at java.lang.ClassLoader.defineClass(ClassLoader.java:761)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
Junit的引用必须放在hamcrest.jar之后
调整顺序后,再次执行