三 【单元测试】Junit 4--Junit4断言

1.0 前言? 断言(assertion)是一种在程序中的一阶逻辑(如:一个结果为真或假的逻辑判断式),目的为了表示与验证软件开发者预期的结果——当程序执行到断言的位置时,对应的断言应该为真 。若断言不为真时,程序会中止执行 , 并给出错误信息 。
1.1 JUnit assert断言这里我们直接上例子
import static org.junit.Assert.assertArrayEquals;import static org.junit.Assert.assertEquals;import static org.junit.Assert.assertFalse;import static org.junit.Assert.assertNotNull;import static org.junit.Assert.assertNotSame;import static org.junit.Assert.assertNull;import static org.junit.Assert.assertSame;import static org.junit.Assert.assertThat;import static org.junit.Assert.assertTrue;import java.util.Arrays;import org.junit.Test;public class AssertTests {@Testpublic void testAssertArrayEquals() {byte[] expected = "trial".getBytes();byte[] actual = "trial".getBytes();assertArrayEquals("failure - byte arrays not same", expected, actual);}@Testpublic void testAssertEquals() {assertEquals("failure - strings are not equal", "text", "text");}@Testpublic void testAssertFalse() {assertFalse("failure - should be false", false);}@Testpublic void testAssertNotNull() {assertNotNull("should not be null", new Object());}@Testpublic void testAssertNotSame() {assertNotSame("should not be same Object", new Object(), new Object());}@Testpublic void testAssertNull() {assertNull("should be null", null);}@Testpublic void testAssertSame() {Integer aNumber = Integer.valueOf(768);assertSame("should be same", aNumber, aNumber);}@Testpublic void testAssertTrue() {assertTrue("failure - should be true", true);}}接下来我们来介绍下他们
方法介绍assertEquals(expected, actual)检查断言两个值相等assertTrue(condition)检查条件为真assertFalse(condition)检查条件为假assertNotNull(object)检查不为空assertNull(object)检查为空assertNotSame(expected, actual)检查两个相关对象是否不指向同一个对象assertSame(expected, actual)检查两个相关对象是否指向同一个对象assertArrayEquals(expectedArray, resultArray)检查两个数组是否相等1.2 assertThat断言1.2.0 assertThat介绍? JUnit 4 结合 Hamcrest 提供了一个全新的断言语法——assertThat 。程序员可以只使用 assertThat 一个断言语句,结合 Hamcrest 提供的匹配符,就可以表达全部的测试思想
1.2.1 一般匹配符断言方法介绍assertThat("myValue", allOf(startsWith("my"), containsString("Val")))allOf匹配符表明如果接下来的所有条件必须都成立测试才通过,相当于“与”(&&)assertThat("myValue", anyOf(startsWith("foo"), containsString("Val")))anyOf匹配符表明如果接下来的所有条件只要有一个成立则测试通过,相当于“或”(assertThat( "myValue", anything() )anything匹配符表明无论什么条件,永远为trueassertThat( "myValue", is("myValue" ) )is匹配符表明如果前面待测的值等于后面给出的值,则测试通过assertThat( "myValue", not("foo"))not匹配符和is匹配符正好相反,表明如果前面待测的值不等于后面给出的值 , 则测试通过1.2.2 字符串相关匹配符方法介绍assertThat("myStringOfNote", containsString("ring"))containsString匹配符表明如果测试的字符串包含子字符串则测试通过assertThat("myStringOfNote", endsWith("Note"))endsWith匹配符表明如果测试的字符串以子字符串结尾则测试通过assertThat("myStringOfNote", startsWith("my"))startsWith匹配符表明如果测试的字符串以子字符串开始则测试通过assertThat("foo", equalTo("foo"))equalTo匹配符表明如果测试的数据等于则测试通过,equalTo可以测试数值之间,字符串之间和对象之间是否相等,相当于Object的equals方法assertThat("Foo", equalToIgnoringCase("FOO"))equalToIgnoringCase匹配符表明如果测试的字符串在忽略大小写的情况下等于则测试通过assertThat("my\tfoobar ", equalToIgnoringWhiteSpace(" myfoo bar"))equalToIgnoringWhiteSpace匹配符表明如果测试的字符串在忽略头尾的任意个空格的情况下等于则测试通过,注意:字符串中的空格不能被忽略1.2.3 数值相关匹配符方法介绍assertThat(1.03, is(closeTo(1.0, 0.03)))closeTo匹配符表明如果所测试的浮点型数在1.0±0.03范围之内则测试通过assertThat(2, greaterThan(1))greaterThan匹配符表明如果所测试的数值大于1则测试通过assertThat(1, lessThan(2))lessThan匹配符表明如果所测试的数值小于2则测试通过assertThat(1, greaterThanOrEqualTo(1))greaterThanOrEqualTo匹配符表明如果所测试的数值大于等于1则测试通过assertThat(1, lessThanOrEqualTo(1))lessThanOrEqualTo匹配符表明如果所测试的数值小于等于1则测试通过1.2.4 集合相关匹配符方法介绍assertThat(myMap, hasEntry("bar", "foo"))hasEntry匹配符表明如果测试的Map对象含有一个键值为"bar"对应元素值为"foo"的Entry项则测试通过ssertThat(Arrays.asList("foo", "bar"), hasItem(startsWith("ba")))hasItem匹配符表明如果测试的迭代对象含有元素以ba开头项则测试通过assertThat(myMap, hasKey("bar"))hasKey匹配符表明如果测试的Map对象含有键值“bar”则测试通过assertThat(myMap, hasValue("foo"))hasValue匹配符表明如果测试的Map对象含有元素值“foo”则测试通过1.2.5 示例Cs.java

推荐阅读