JUnit4.4 新特性 assertThat 使用详解

断言:预期与实际结果的判断 Assert

JUnit4.4引入了新的断言语法‘assertThat’,使得程序员在编写单元测试的assert语句时,可以有更强的可读性,而且更加灵活。

基本语法:
    assertThat([value],[matcher statement]);
value是接下来想要测试的变量值,matcher statement是使用Hamcrest匹配符来表达对前面变量所期望的值的声明,如果value和matcher statement所表达的期望值相符,测试成功,否则失败

优点

相比较其他断言语句,assertThat具有如下优点:
1.assertThat可以替代所有assert语句,使用编写测试用例变的简单,代码风格变得统一,测试代码也更容易维护
2.使用了类似的“主谓宾”的语法模式,代码易读
    // JUnit 4.4 以前的“主谓宾”结构语句
    assertEquals(3 , x);
    // JUnit 4.4
    assertThat(x , is(3));
3.可以和Matcher匹配符联合起来达到更多目的,使用灵活
    // 想要判断某个字符串s是否含有个子字符串“developer”或“Worker”中间的一个
    // JUnit 4.4 以前版本:assertTrue(s.indexOf("developer")>-1 || s.indexOf("Worker")>-1);
    // JUnit 4.4 匹配符anyOf 表示任何一个条件满足则成立,类似于逻辑或 “||”,匹配符containsString 表示是否含有参数子字符串
    assertThat(s , anyOf(containsString("developer"),containsString("Worker")));
    // 联合匹配符not和equalTo表示“不等于”
    assertThat(something , not(equqlTt("developer")));
    // 联合匹配符not和containsString表示“不包含子字符串”
    assertThat(something , not(containsString("Worker")));
    // 联合匹配符anyOf和containsString表示“包含任意一个子字符串”
    assertThat(something , anyOf(containsString("developer") , containsString("Worker")));

一般匹配符

// allOf匹配符表明如果记下来的所有条件必须都成立测试才能通过,相当于“与”(&&)
assertThat( testedNumber , allOf( greaterThan(8) , lessThan(16) ));
// anyOf匹配符表名如果接下来的条件只要有一个成立,则测试通过,相当于“或”(||)
assertThat( testedNumber , anyOf( greaterThan(16) , lessThan(8) ));
// anything匹配符表名无论什么条件,永远为true
assertThat( testedNumber , anything() );
// is匹配符表名如果前面待测的object等于后面的object,则测试通过
assertThat( testedString , is( "developerWorks" ));
// not匹配符和is匹配符正好相反,表明前面待测的object不等于后面给出的object,则测试通过
assertThat( testedString , not( "developerWorkes" ) );

字符串相关匹配符

// containsString匹配符表明如果测试的字符串testedString包含子字符串“developerWorks”,则测试通过
assertThat( testedString , containsString( "developerWorks" ) );
// endsWith匹配符表明如果测试的字符串testedString以子字符串“developerWorks”结尾,则测试通过
assertThat( testedString , endsWith( "developerWorks" ) );
// startsWith匹配符表明如果测试的字符串testedString以子字符串“developerWorks”开始,则测试通过
assertThat( testedString , startsWith( "developerWorks" ) );
// equalTo匹配符表明如果测试的testedValue等于expectedValue,则测试通过,equalTo可以测试数值之间,字符串之间和对象之间是否相等,相当于Object的equals方法
assertThat( testedString , equalTo( expectedValue ));
// equalToIgnoringCase匹配符表明如果测试的字符串testedString在忽略大小写的情况下等于“developerWorks”,则测试通过
assertThat( testedString , equalToIgnoringCase( “developerWorks” ) );
// equalToIgnoringWhiteCase匹配符表明如果测试的字符串testedString在忽略头尾的任意空格的情况下等于“developerWorks”,则测试通过,注意:字符串中间的空格不能被忽略
assertThat( testedString , equalToIgnoringWhiteCase( “developerWorks” ) );

数值相关匹配符

// 测试的浮点型数testedDouble在20±0.5
assertThat( testedDouble , closeTo( 20. , 0.5 ));
// 测试的浮点型数testedDouble > 16.0
assertThat( testedDouble , greaterThan( 16.0 ));
// 测试的浮点型数testedDouble < 16.0
assertThat( testedDouble , lessThan( 16.0 ));
// 测试的浮点型数testedDouble >= 16.0
assertThat( testedDouble , greaterThanOrEqualTo( 16.0 ));
// 测试的浮点型数testedDouble <= 16.0
assertThat( testedDouble , lessThanOrEqualTo( 16.0 ));

collection相关匹配符

// hasEntry匹配符表明如果测试的Map对象mapObject含有一个键值为“key”对应的元素值为“value”的Entry,则测试通过
assertThat( mapObject , hasEntry( "key" , "value" ) );
// hasItem匹配符表明如果测试的迭代对象iterableObject含有元素“elemenet”项,则测试通过
assertThat( iterableObject , hasItem( “element” ) );
// hasKey匹配符表明测试的Map对象mapObject含有键值"key"则测试通过
assertThat( mapObject , hasKey( "key" ) );
// hasValue匹配符表明如果测试的Map对象mapObject含有元素值“value”,则测试通过
assertThat( mapObject , hasValue( "value" ) );

猜你喜欢

转载自blog.csdn.net/li_tiantian/article/details/81587589
今日推荐