正如您从上一篇文章看到的,实现JUnit单元测试的大部分秘密是使用org.junit.Assert类中的assert方法。在本文中,我将详细介绍该类中可用的assert方法。
以下是断言方法的列表:
assertArrayEquals()
assertEquals()
assertTrue() + assertFalse()
assertNull() + assertNotNull()
assertSame() and assertNotSame()
assertThat()
在本文的其余部分中,我将解释这些assert方法的工作原理,并向您展示如何使用它们的示例。这些例子将测试一个名为MyUnit的类。这个类的代码没有显示出来,但是你不需要代码来了解如何测试它。
assertArrayEquals() assertArrayEquals()方法将测试两个数组是否相等。换句话说,如果两个数组包含相同数量的元素,并且数组中的所有元素都相等。要检查元素相等性,使用其equals()方法比较数组中的元素。更具体地说,使用它们的equals()方法逐个比较每个数组的元素。这意味着,这两个数组包含相同的元素是不够的。他们也必须按照同样的顺序出现。
下面是例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 import org.junit.Test;import static org.junit.Assert.*;public class MyUnitTest { @Test public void testGetTheStringArray () { MyUnit myUnit = new MyUnit(); String[] expectedArray = {"one" , "two" , "three" }; String[] resultArray = myUnit.getTheStringArray(); assertArrayEquals(expectedArray, resultArray); } }
首先创建预期的数组。第二步myUnit.getTheStringArray()方法被调用,这是我们要测试的方法。第三步,将myUnit.getTheStringArray()方法调用的结果与预期的数组进行比较。
如果数组相等,则assertArrayEquals()将继续执行而不会出现错误。如果数组不相等,将抛出异常,并且测试中止。assertArrayEquals()之后的任何测试代码都不会被执行。
assertEquals() assertEquals()方法使用equals()方法比较两个对象的相等性。下面是例子:1 2 3 4 5 6 7 8 9 10 11 12 13 14 import org.junit.Test;import static org.junit.Assert.*;public class MyUnitTest { @Test public void testConcatenate () { MyUnit myUnit = new MyUnit(); String result = myUnit.concatenate("one" , "two" ); assertEquals("onetwo" , result); } }
首先调用myUnit.concatenate()方法,结果存储在变量result中。其次,使用assertEquals()方法将结果值与期望值“onetwo”进行比较。如果两个对象根据其equals()方法的实现相等,则assertEquals()方法将正常返回。否则,assertEquals()方法将抛出异常,并且测试将在那里停止。
此示例与String对象进行了比较,但assertEquals()方法可以将任何两个对象进行比较。 assertEquals()方法也可以使用像int和float这样的基本类型彼此进行比较。
assertTrue() + assertFalse() assertTrue()和assertFalse()方法测试单个变量以查看其值是true还是false。 下面是例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 import org.junit.Test;import static org.junit.Assert.*;public class MyUnitTest { @Test public void testGetTheBoolean () { MyUnit myUnit = new MyUnit(); assertTrue (myUnit.getTheBoolean()); assertFalse(myUnit.getTheBoolean()); } }
如果getTheBoolean()方法返回true,则assertTrue()方法将正常返回。 否则会抛出异常,测试将停止。
如果getTheBoolean()方法返回false,则assertFalse()方法将正常返回。 否则会抛出异常,测试将停止。
当然,如果getTheBoolean()方法在两个调用中都返回相同的值,则上述测试将在assertTrue()或assertFalse()调用中失败。
assertNull() + assertNotNull() assertNull()和assertNotNull()方法测试单个变量以查看它是否为null或不为null。下面是例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 import org.junit.Test;import static org.junit.Assert.*;public class MyUnitTest { @Test public void testGetTheObject () { MyUnit myUnit = new MyUnit(); assertNull(myUnit.getTheObject()); assertNotNull(myUnit.getTheObject()); } }
如果myUnit.getTheObject()返回null,则assertNull()方法将正常返回。 如果返回非空值,则assertNull()方法将抛出异常,并在此处中止测试。
assertNotNull()方法与assertNull()方法相反,如果将null值传递给它,则抛出异常,如果非空值传递给它,则返回正常。
assertSame() and assertNotSame() assertSame()和assertNotSame()方法测试两个对象引用是否指向相同的对象。指向的两个对象根据其equals()方法是相等的还不够。它必须是完全相同的对象指向。下面是例子:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 import org.junit.Test;import static org.junit.Assert.*;public class MyUnitTest { @Test public void testGetTheSameObject () { MyUnit myUnit = new MyUnit(); assertSame (myUnit.getTheSameObject(), myUnit.getTheSameObject()); assertNotSame(myUnit.getTheSameObject(), myUnit.getTheSameObject()); } }
如果两个引用指向同一个对象,则assertSame()方法将正常返回。 否则将抛出异常,测试将在此停止。
assertNotSame()方法与assertSame()方法相反。 如果两个对象没有指向同一个对象,则assertNotSame()方法将正常返回。 其他人抛出异常,测试停在这里。
assertThat() assertThat()方法将对象与org.hamcrest.Matcher进行比较,以查看给定对象是否匹配Matcher要求匹配的任何对象。
Matcher需要更长的时间来解释,我们将在下一篇文章中对其进行解释。