大家好,本节我们将JUnit高级应用。本节我们会介绍JUnit4内置的断言、使用hamcrest灵活地使用匹配器,详解@Before、@After、@BeforeClass、@AfterClass、@Test、@Ignore注解,在测试时进行异常测试和限时测试,了解JUnit4的设计和运行机制,学习编写套件测试、参数化测试、尝试编写自定义测试运行器。
同时作为补充,我们也会介绍很多知识,如指定测试用例的执行顺序、JUnit4的Rule规则、假设机制和理论机制,介绍一个JUnit进行多线程代码和并发测试的例子,然后去找找看JUnit的第三方扩展。
下面首先介绍的是Assert断言。之前的入门实例中,我们学习了assertEquals,判断相等的断言。现在我们介绍JUnit4中内置的更多的断言。
1.1 Assert断言
[操作1]
新建工程JUnitTest2。
新建一个类,AssertTests,包名cn.edu.jit.junit.samples。
需要导入需要Assert类。
| import static org.junit.Assert.*; |
|---|
静态导入的好处是,使用静态导入可以使被导入类的静态变量和静态方法在当前类直接可见,使用这些静态成员无需再给出他们的类名。
Assert类提供了一系列的断言方法来编写测试用例,允许检查测试方法的期望结果值和真实返回值,只有失败的断言才会被记录。
1.1.1 assertEquals
首先我们来回顾一下,之前学习的assertEquals断言。
注意:测试方法必须是public void,即公共、无返回值的;可以抛出异常。
assertEquals接收两个参数,第一个是预期值,第二个是实际执行的结果。
JUnit为所有基本类型、对象和数组提供了可重载的断言方法。
2参数的assertEquals方式是重载自下面这个3个参数的AssertEquals方法。
它在前面多了一个参数,它的第一个参数是填写用于断言错误的标识消息的,这个标识消息在断言错误之后会打印出来,可以针对打印的日志信息,知道出错在哪,便于快速的定位错误和解决。
我们来用这个3参数的assertEquals写一个测试用例,判断两个字符串是否相等。
@Test
public void testAssertEquals() {
assertEquals("failure - strings are not equal","text","text");
}
我们来运行一下。当断言成功时,是不会出现标识消息的。
修改一下,故意让它断言错误。
断言错误的标识信息就会在Failure Trace中显示出来。
双击它,你还会看到结果的比对窗口。清晰明了。
1.1.2 assertTrue
接下来,介绍assertTrue的断言。
@Test
public void testAssertTrue() {
assertTrue("failure - condition should be true", 2<3);
}
assertTrue判断的是条件表达式的真假。如果条件表达式是 2>3 ,显然是错的。运行所示:
1.1.3 assertFalse
接下来,介绍一下assertFalse,与assertTrue 相反,assertFalse判断的是错误。
@Test
public void testAssertFalse() {
assertFalse("failure - condition should be false", 2>3);
}
1.1.4 assertNull
我们再来看assertNull,assertNull用于检查对象是否为空。
@Test
public void testAssertNull() {
assertNull("failure - condition should be null",null);
}
与它相对的是assertNotNull。
1.1.5 assertNotNull
assertNotNull是检查对象是否不为空。给它传入一个对象引用,例如new Integer(1)。
@Test
public void testAssertNotNull() {
assertNotNull("failure - condition should not be null", new Integer(1));
}
下面,我们比较两个数组是否相等,使用assertArrayEquals。
1.1.6 assertArrayEquals
我们可以看见,assertArrayEquals的数组参数类型,有byte型、char型、int型、long型、short型、double型、flout型,还有Object对象类型。
我们,就以byte型数组为例。准备两组字节数组。
@Test
public void testAssertArrayEquals() {
byte[] expecteds = "trail".getBytes();
byte[] actuals = "trail".getBytes();
assertArrayEquals("failure - byte array are not same",expecteds, actuals);
}
除了以上断言,还有assertSame断言。
1.1.7 assertSame
不同于assertEquals,assertSame断言比较两个对象引用同一个对象。
@Test
public void testAssertSame() {
String str1 = new String("hello");
Object object = str1;
assertSame("failure - two number should be same", str1, object);
}
相对的是assertNotSame的断言。
1.1.8 assertNotSame
assertNotSame断言两个对象引用不同的对象。
@Test
public void testAssertNotSame() {
String str1 = new String("hello");
String str2 = new String("world");
assertNotSame("failure - two number should not be same", str1, str2);
}
总体运行