正如您从上一篇文章看到的,实现JUnit单元测试的大部分秘密是使用org.junit.Assert类中的assert方法。在本文中,我将详细介绍该类中可用的assert方法。
以下是断言方法的列表:
- assertArrayEquals()
- assertEquals()
- assertTrue() + assertFalse()
- assertNull() + assertNotNull()
- assertSame() and assertNotSame()
- assertThat()
在本文的其余部分中,我将解释这些assert方法的工作原理,并向您展示如何使用它们的示例。这些例子将测试一个名为MyUnit的类。这个类的代码没有显示出来,但是你不需要代码来了解如何测试它。
assertArrayEquals()
assertArrayEquals()方法将测试两个数组是否相等。换句话说,如果两个数组包含相同数量的元素,并且数组中的所有元素都相等。要检查元素相等性,使用其equals()方法比较数组中的元素。更具体地说,使用它们的equals()方法逐个比较每个数组的元素。这意味着,这两个数组包含相同的元素是不够的。他们也必须按照同样的顺序出现。
下面是例子:
1 | import org.junit.Test; |
首先创建预期的数组。第二步myUnit.getTheStringArray()方法被调用,这是我们要测试的方法。第三步,将myUnit.getTheStringArray()方法调用的结果与预期的数组进行比较。
如果数组相等,则assertArrayEquals()将继续执行而不会出现错误。如果数组不相等,将抛出异常,并且测试中止。assertArrayEquals()之后的任何测试代码都不会被执行。
assertEquals()
assertEquals()方法使用equals()方法比较两个对象的相等性。下面是例子:1
2
3
4
5
6
7
8
9
10
11
12
13
14import 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 | import org.junit.Test; |
如果getTheBoolean()方法返回true,则assertTrue()方法将正常返回。 否则会抛出异常,测试将停止。
如果getTheBoolean()方法返回false,则assertFalse()方法将正常返回。 否则会抛出异常,测试将停止。
当然,如果getTheBoolean()方法在两个调用中都返回相同的值,则上述测试将在assertTrue()或assertFalse()调用中失败。
assertNull() + assertNotNull()
assertNull()和assertNotNull()方法测试单个变量以查看它是否为null或不为null。下面是例子:
1 | import org.junit.Test; |
如果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
16import 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需要更长的时间来解释,我们将在下一篇文章中对其进行解释。