一般匹配符
1、assertThat( testedNumber, allOf( greaterThan(8), lessThan(16) ) );

注释: allOf匹配符表明如果接下来的所有条件必须都成立测试才通过,相当于“与”(&&)

2、assertThat( testedNumber, anyOf( greaterThan(16), lessThan(8) ) );

注释:anyOf匹配符表明如果接下来的所有条件只要有一个成立则测试通过,相当于“或”(||)
3、assertThat( testedNumber, anything() );

注释:anything匹配符表明无论什么条件,永远为true
4、assertThat( testedString, is( "developerWorks" ) );

注释: is匹配符表明如果前面待测的object等于后面给出的object,则测试通过
5、assertThat( testedString, not( "developerWorks" ) );

注释:not匹配符和is匹配符正好相反,表明如果前面待测的object不等于后面给出的object,则测试通过

字符串相关匹配符

1、assertThat( testedString, containsString( "developerWorks" ) );

注释:containsString匹配符表明如果测试的字符串testedString包含子字符串"developerWorks"则测试通过

2、assertThat( testedString, endsWith( "developerWorks" ) );

注释:endsWith匹配符表明如果测试的字符串testedString以子字符串"developerWorks"结尾则测试通过

3、assertThat( testedString, startsWith( "developerWorks" ) );

注释:startsWith匹配符表明如果测试的字符串testedString以子字符串"developerWorks"开始则测试通过

4、assertThat( testedValue, equalTo( expectedValue ) );

注释: equalTo匹配符表明如果测试的testedValue等于expectedValue则测试通过,equalTo可以测试数值之间,字
符串之间和对象之间是否相等,相当于Object的equals方法

5、assertThat( testedString, equalToIgnoringCase( "developerWorks" ) );

注释:equalToIgnoringCase匹配符表明如果测试的字符串testedString在忽略大小写的情况下等于"developerWorks"则测试通过

6、assertThat( testedString, equalToIgnoringWhiteSpace( "developerWorks" ) );

注释:equalToIgnoringWhiteSpace匹配符表明如果测试的字符串testedString在忽略头尾的任意个空格的情况下等

于"developerWorks"则测试通过,注意:字符串中的空格不能被忽略

数值相关匹配符


1、assertThat( testedDouble, closeTo( 20.0, 0.5 ) );

注释:closeTo匹配符表明如果所测试的浮点型数testedDouble在20.0±0.5范围之内则测试通过

2、assertThat( testedNumber, greaterThan(16.0) );

注释:greaterThan匹配符表明如果所测试的数值testedNumber大于16.0则测试通过

3、assertThat( testedNumber, lessThan (16.0) );

注释:lessThan匹配符表明如果所测试的数值testedNumber小于16.0则测试通过

4、assertThat( testedNumber, greaterThanOrEqualTo (16.0) );

注释: greaterThanOrEqualTo匹配符表明如果所测试的数值testedNumber大于等于16.0则测试通过

5、assertThat( testedNumber, lessThanOrEqualTo (16.0) );

注释:lessThanOrEqualTo匹配符表明如果所测试的数值testedNumber小于等于16.0则测试通过

collection相关匹配符


1、assertThat( mapObject, hasEntry( "key", "value" ) );

注释:hasEntry匹配符表明如果测试的Map对象mapObject含有一个键值为"key"对应元素值为"value"的Entry项则测试通过

2、assertThat( iterableObject, hasItem ( "element" ) );

注释:hasItem匹配符表明如果测试的迭代对象iterableObject含有元素“element”项则测试通过

3、assertThat( mapObject, hasKey ( "key" ) );

注释: hasKey匹配符表明如果测试的Map对象mapObject含有键值“key”则测试通过

4、assertThat( mapObject, hasValue ( "key" ) );

注释:hasValue匹配符表明如果测试的Map对象mapObject含有元素值“value”则测试通过

-------------------------------------------------------------------------------------------------------------------------------

JUnit4.4引入了Hamcrest框架,Hamcest提供了一套匹配符Matcher,这些匹配符更接近自然语言,可读性高,更加灵活

/**equalTo匹配符断言被测的testedValue等于expectedValue,
* equalTo可以断言数值之间,字符串之间和对象之间是否相等,相当于Object的equals方法
*/
assertThat(testedValue, equalTo(expectedValue));

/**equalToIgnoringCase匹配符断言被测的字符串testedString
*在忽略大小写的情况下等于expectedString
*/
assertThat(testedString, equalToIgnoringCase(expectedString));

/**equalToIgnoringWhiteSpace匹配符断言被测的字符串testedString
*在忽略头尾的任意个空格的情况下等于expectedString,
*注意:字符串中的空格不能被忽略
*/
assertThat(testedString, equalToIgnoringWhiteSpace(expectedString);

/**containsString匹配符断言被测的字符串testedString包含子字符串subString**/
assertThat(testedString, containsString(subString) );

/**endsWith匹配符断言被测的字符串testedString以子字符串suffix结尾*/
assertThat(testedString, endsWith(suffix));

/**startsWith匹配符断言被测的字符串testedString以子字符串prefix开始*/
assertThat(testedString, startsWith(prefix));

/**nullValue()匹配符断言被测object的值为null*/
assertThat(object,nullValue());

/**notNullValue()匹配符断言被测object的值不为null*/
assertThat(object,notNullValue());

/**is匹配符断言被测的object等于后面给出匹配表达式*/
assertThat(testedString, is(equalTo(expectedValue)));

/**is匹配符简写应用之一,is(equalTo(x))的简写,断言testedValue等于expectedValue*/
assertThat(testedValue, is(expectedValue));

/**is匹配符简写应用之二,is(instanceOf(SomeClass.class))的简写,
*断言testedObject为Cheddar的实例
*/
assertThat(testedObject, is(Cheddar.class));

/**not匹配符和is匹配符正好相反,断言被测的object不等于后面给出的object*/
assertThat(testedString, not(expectedString));

/**allOf匹配符断言符合所有条件,相当于“与”(&&)*/
assertThat(testedNumber, allOf( greaterThan(8), lessThan(16) ) );

/**anyOf匹配符断言符合条件之一,相当于“或”(||)*/
assertThat(testedNumber, anyOf( greaterThan(16), lessThan(8) ) );

/**closeTo匹配符断言被测的浮点型数testedDouble在20.0¡À0.5范围之内*/
assertThat(testedDouble, closeTo( 20.0, 0.5 ));

/**greaterThan匹配符断言被测的数值testedNumber大于16.0*/
assertThat(testedNumber, greaterThan(16.0));

/** lessThan匹配符断言被测的数值testedNumber小于16.0*/
assertThat(testedNumber, lessThan (16.0));

/** greaterThanOrEqualTo匹配符断言被测的数值testedNumber大于等于16.0*/
assertThat(testedNumber, greaterThanOrEqualTo (16.0));

/** lessThanOrEqualTo匹配符断言被测的testedNumber小于等于16.0*/
assertThat(testedNumber, lessThanOrEqualTo (16.0));

/**hasEntry匹配符断言被测的Map对象mapObject含有一个键值为"key"对应元素值为"value"的Entry项*/
assertThat(mapObject, hasEntry("key", "value" ) );

/**hasItem匹配符表明被测的迭代对象iterableObject含有元素element项则测试通过*/
assertThat(iterableObject, hasItem (element));

/** hasKey匹配符断言被测的Map对象mapObject含有键值“key”*/
assertThat(mapObject, hasKey ("key"));

/** hasValue匹配符断言被测的Map对象mapObject含有元素值value*/
assertThat(mapObject, hasValue(value));

---------------------------------------------------------------------------------------------------------------------------

待测试的方法
  1. //Get number from [p, r]
  2. int getRandomFrom(int p, int r){
  3. int chooes = r-p+1;
  4. return (int) Math.floor(Math.random() * chooes + p);
  5. }
第一步:引入类或static方法
  1. import static org.junit.Assert.*;
  2. import static org.hamcrest.CoreMatchers.*;
  3. import static org.junit.matchers.JUnitMatchers.*;
第二步:些测试方法
  1. @Test
  2. public void testGetRandomFrom(){
  3. for(int i=0 ; i<100 ; i++){
  4. assertThat(quickSort.getRandomFrom(5, 10),  anyOf(equalTo(5),equalTo(6),equalTo(7),equalTo(8),equalTo(9),equalTo(10)));
  5. }
  6. }
以下是引用别人的总结:
1.JUnit4.4引入了Hamcrest框架,Hamcest提供了一套匹配符Matcher,这些匹配符更接近自然语言,可读性高,更加灵活;
2.使用全新的断言语法:assertThat,结合Hamcest提供的匹配符,只用这一个方法,就可以实现所有的测试;
3.assertThat语法如下:
     assertThat(T actual, Matcher<T> matcher);
     assertThat(String reason, T actual, Matcher<T> matcher);
     其中actual为需要测试的变量,matcher为使用Hamcrest的匹配符来表达变量actual期望值的声明;
4.注意事项:
     a.必须导入JUnit4.4之后的版本才能使用assertThat方法;
     b.不需要继承TestCase类,但是需要测试方法前必须加“@Test”。
实例:
  1. public class C {
  2. public int add(int a, int b) {
  3. return a + b;
  4. }
  5. public double div(double a, double b) {
  6. return a / b;
  7. }
  8. public String getName(String name) {
  9. return name;
  10. }
  11. public List<String> getList(String item) {
  12. List<String> l = new ArrayList<String>();
  13. l.add(item);
  14. return l;
  15. }
  16. public Map<String, String> getMap(String key, String value) {
  17. Map<String, String> m = new HashMap<String, String>();
  18. m.put(key, value);
  19. return m;
  20. }
  21. }
  1. import static org.junit.Assert.*;
  2. import static org.hamcrest.Matchers.*;
  3. import java.util.List;
  4. import java.util.Map;
  5. import org.junit.Test;
  6. public class CTest {
  7. @Test
  8. public void testAdd() {
  9. //一般匹配符
  10. int s = new C().add(1, 1);
  11. //allOf:所有条件必须都成立,测试才通过
  12. assertThat(s, allOf(greaterThan(1), lessThan(3)));
  13. //anyOf:只要有一个条件成立,测试就通过
  14. assertThat(s, anyOf(greaterThan(1), lessThan(1)));
  15. //anything:无论什么条件,测试都通过
  16. assertThat(s, anything());
  17. //is:变量的值等于指定值时,测试通过
  18. assertThat(s, is(2));
  19. //not:和is相反,变量的值不等于指定值时,测试通过
  20. assertThat(s, not(1));
  21. //数值匹配符
  22. double d = new C().div(10, 3);
  23. //closeTo:浮点型变量的值在3.0±0.5范围内,测试通过
  24. assertThat(d, closeTo(3.0, 0.5));
  25. //greaterThan:变量的值大于指定值时,测试通过
  26. assertThat(d, greaterThan(3.0));
  27. //lessThan:变量的值小于指定值时,测试通过
  28. assertThat(d, lessThan(3.5));
  29. //greaterThanOrEuqalTo:变量的值大于等于指定值时,测试通过
  30. assertThat(d, greaterThanOrEqualTo(3.3));
  31. //lessThanOrEqualTo:变量的值小于等于指定值时,测试通过
  32. assertThat(d, lessThanOrEqualTo(3.4));
  33. //字符串匹配符
  34. String n = new C().getName("Magci");
  35. //containsString:字符串变量中包含指定字符串时,测试通过
  36. assertThat(n, containsString("ci"));
  37. //startsWith:字符串变量以指定字符串开头时,测试通过
  38. assertThat(n, startsWith("Ma"));
  39. //endsWith:字符串变量以指定字符串结尾时,测试通过
  40. assertThat(n, endsWith("i"));
  41. //euqalTo:字符串变量等于指定字符串时,测试通过
  42. assertThat(n, equalTo("Magci"));
  43. //equalToIgnoringCase:字符串变量在忽略大小写的情况下等于指定字符串时,测试通过
  44. assertThat(n, equalToIgnoringCase("magci"));
  45. //equalToIgnoringWhiteSpace:字符串变量在忽略头尾任意空格的情况下等于指定字符串时,测试通过
  46. assertThat(n, equalToIgnoringWhiteSpace(" Magci   "));
  47. //集合匹配符
  48. List<String> l = new C().getList("Magci");
  49. //hasItem:Iterable变量中含有指定元素时,测试通过
  50. assertThat(l, hasItem("Magci"));
  51. Map<String, String> m = new C().getMap("mgc", "Magci");
  52. //hasEntry:Map变量中含有指定键值对时,测试通过
  53. assertThat(m, hasEntry("mgc", "Magci"));
  54. //hasKey:Map变量中含有指定键时,测试通过
  55. assertThat(m, hasKey("mgc"));
  56. //hasValue:Map变量中含有指定值时,测试通过
  57. assertThat(m, hasValue("Magci"));
  58. }
  59. }
 
转自:http://langgufu.iteye.com/blog/1893927

assertThat用法的更多相关文章

  1. Java、JavaWeb中单元测试用到的测试方法

    写出的代码做单元测试时,一定要记住从三个方面出发:1.成功  2.异常  3 逻辑错误(即没有异常也可能程序运行出最后结果,可是呢?呵呵).这就是在做测试时我要牢记的三个方面,同时思维要严谨也即做事要 ...

  2. Junit 断言 assertThat Hamcrest匹配器

    junit断言总结本文参考了http://blog.csdn.net/wangpeng047/article/details/9628449一 junit断言1.JUnit框架用一组assert方法封 ...

  3. Junit4单元测试之高级用法

    Junit单元测试框架是Java程序开发必备的测试利器,现在最常用的就是Junit4了,在Junit4中所有的测试用例都使用了注解的形式,这比Junit3更加灵活与方便.之前在公司的关于单元测试的培训 ...

  4. Junit4用法

    序号 方法和描述 1 void assertEquals(boolean expected, boolean actual) 检查两个变量或者等式是否平衡 2 void assertTrue(bool ...

  5. EditText 基本用法

    title: EditText 基本用法 tags: EditText,编辑框,输入框 --- EditText介绍: EditText 在开发中也是经常用到的控件,也是一个比较必要的组件,可以说它是 ...

  6. jquery插件的用法之cookie 插件

    一.使用cookie 插件 插件官方网站下载地址:http://plugins.jquery.com/cookie/ cookie 插件的用法比较简单,直接粘贴下面代码示例: //生成一个cookie ...

  7. Java中的Socket的用法

                                   Java中的Socket的用法 Java中的Socket分为普通的Socket和NioSocket. 普通Socket的用法 Java中的 ...

  8. [转载]C#中MessageBox.Show用法以及VB.NET中MsgBox用法

    一.C#中MessageBox.Show用法 MessageBox.Show (String) 显示具有指定文本的消息框. 由 .NET Compact Framework 支持. MessageBo ...

  9. python enumerate 用法

    A new built-in function, enumerate() , will make certain loops a bit clearer. enumerate(thing) , whe ...

随机推荐

  1. C++中类的前向声明的用法

    原创文章,未经博主允许禁止转载. C++的类可以进行前向声明.但是,仅仅进行前向声明而没有定义的类是不完整的,这样的类,只能用于定义指针.引用.以及用于函数形参的指针和引用.而不能定义对象(因为此时编 ...

  2. ElasticSearch介绍 【未完成】

    ElasticSearch应用于搜索是一个不错的选择,虽有Lucene,但ELK的搜索方便. http://joelabrahamsson.com/elasticsearch-101/ 一.下载 ht ...

  3. C2第三次作业解题报告

    看过题解后如果觉得还算有用,请帮忙加点我所在团队博客访问量 http://www.cnblogs.com/newbe/ http://www.cnblogs.com/newbe/p/4069834.h ...

  4. C2第七次作业解题报告

    看过题解后如果觉得还算有用,请帮忙加点我所在团队博客访问量 http://www.cnblogs.com/newbe/ http://www.cnblogs.com/newbe/p/4069834.h ...

  5. URAL - 1917 Titan Ruins: Deadly Accuracy(水题)

    水题一个,代码挫了一下: 题意不好理解. 你去一个洞窟内探险,洞窟内有许多宝石,但都有魔法守护,你需要用魔法将它们打下来. 每个宝石都有自己的防御等级,当你的魔法超过它的防御等级时它就会被你打下来. ...

  6. Dynamic CRM 2013学习笔记(二十八)用JS动态设置字段的change事件、必填、禁用以及可见

    我们知道通过界面设置字段的change事件,是否是必填,是否可见非常容易.但有时我们需要动态地根据某些条件来设置,这时有需要通过js来动态地控制了. 下面分别介绍如何用js来动态设置.   一.动态设 ...

  7. Dynamic CRM 2015学习笔记 系列汇总

    这里列出所有 Dynamic CRM 2015学习笔记 系列文章,方便大家查阅.有任何建议.意见.需要,欢迎大家提交评论一起讨论. 本文原文地址:Dynamic CRM 2015学习笔记 系列汇总 一 ...

  8. 解决nginx反向代理缓存不起作用的问题

    昨天尝试用nginx搭建nuget镜像服务器,镜像服务器需要两个功能:1)反向代理:2)内容缓存. 用nginx做反向代理,配置非常简单,只需在/etc/nginx/nginx.conf中添加一个包含 ...

  9. Run Android on Your Netbook or Desktop

    Run Android on Your Netbook or Desktop Would you like to try out Google's Android OS on your netbook ...

  10. [ACM_水题] ZOJ 3706 [Break Standard Weight 砝码拆分,可称质量种类,暴力]

    The balance was the first mass measuring instrument invented. In its traditional form, it consists o ...