8.1.5 介绍一下断言
我们可以看出,断言在Junit测试中的重要性,Junit最后是通过断言来决定测试用例通过与否。下面我们来看看常见的断言。
1,assertEquals([Stringmessage],expected,actual)
message:可选,假如提供,将会在发生错误时报告这个消息[J1]
expected:是期望值,通常都是用户指定的内容。
actual:是被测试的代码返回的实际值。
例:assertEquals("equals","1","1");
2,assertEquals([Stringmessage],expected,actual,tolerance)
message:是个可选的消息,假如提供,将会在发生错误时报告这个消息。
expected:是期望值,通常都是用户指定的内容。
actua:是被测试的代码返回的实际值。
toleranc:是误差参数,参加比较的两个浮点数在这个误差之内则会被认为是相等的。
例:assertEquals ("yes",6.6,13.0/2.0,0.5);
3,assertTrue ([String message],Boolean condition)
message:是个可选的消息,假如提供,将会在发生错误时报告这个消息。
condition:是待验证的布尔型值。
该断言用来验证给定的布尔型值是否为真,假如结果为假,则验证失败。
例:assertTrue("true",0==0);
4,assertFalse([String message],Boolean condition)
message:是个可选的消息,假如提供,将会在发生错误时报告这个消息。
condition:是待验证的布尔型值。
该断言用来验证给定的布尔型值是否为假,假如结果为真,则验证失败。
例:assertFalse("false",4==5);
5,assertNull([String message],Object object)
message:是个可选的消息,假如提供,将会在发生错误时报告这个消息。
object:是待验证的对象。
该断言用来验证给定的对象是否为null,假如不为null,则验证失败。
例:assertNull("null",null);
6,assertNotNull([String message],Object object)
message:是个可选的消息,假如提供,将会在发生错误时报告这个消息。
object:是待验证的对象。
该断言用来验证给定的对象是否为null,假如不为null,则验证失败。
该断言用来验证给定的对象是否为非null,假如为null,则验证失败。
例:assertNotNull("not null",new String());
7,assertSame ([String message], expected,actual)
message:是个可选的消息,假如提供,将会在发生错误时报告这个消息。
expected:是期望值。
actual:是被测试的代码返回的实际值。
该断言用来验证expected参数和actual参数所引用的是否是同一个对象,假如不是,则验证失败。
例:assertSame("same",6,3+3);
8,assertNotSame ([String message], expected,actual)
message:是个可选的消息,假如提供,将会在发生错误时报告这个消息。
expected:是期望值。
actual:是被测试的代码返回的实际值。
该断言用来验证expected参数和actual参数所引用的是否是不同对象,假如所引用的对象相同,则验证失败。
例:assertNotSame("not same",5,4+2);
9,fail
fail([Stringmessage])
message是个可选的消息,假如提供,将会在发生错误时报告这个消息。
该断言会使测试立即失败,通常用在测试不能达到的分支上(如异常)。
8.1.6 案例分析
案例8-3:路径覆盖测试。
最后以本书中:“路径覆盖测试”提到的产品代码的例子为例,结束本章的介绍。
代码流程如图8-7所示。
图8-7 单元测试流程图
函数返回参数j+k,产品代码如下:
package com.jerry; public class TestDemo { int k=0; int j=0; public void clear() { // 将结果清零 k=0; j=0; } public int myTest(int x,int y,int z){ if ((x>3)&&(z<10)){ k=x*y-1; j=k*k; } if((x==4)||(y>5)){ j=x*j+10; } j = j%3; return j+k; } }
根据测试用例:
测试用例 |
k+j |
路径 |
x=4、y=6、z=9 |
25 |
L4 |
x=4、y=5、z=10 |
1 |
L1 |
x=5、y=4、z=9 |
20 |
L2 |
x=4、y=5、z=10 |
1 |
L3 |
用参数化的形式实现,代码如下:
packagecom.jerry; import static org.junit.Assert.assertEquals; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameters; import java.util.Arrays; import java.util.Collection; import org.junit.Before; @RunWith(Parameterized.class) publicclass TestDemoTest { private static TestDemoTestDemo = new TestDemo (); //声明被测对象类 private int param1; //定义成员变量 private int param2; //定义成员变量 private int param3; //定义成员变量 private int result; //定义成员变量 @Parameters //设置参数 public static Collection<Object[]> data(){ return Arrays.asList(new Object[][] { {4,6,9,25}, {4,5,10,1}, {5,4,9,20}, {4,5,10,1}, } ); } // 构造函数,对变量进行初始化 public TestDemoTest(int param1,intparam2,int param3,int result) { this.param1=param1; this.param2=param2; this.param3=param3; this.result =result; } @Before //初始化 public void setUp() throws Exception { TestDemo.clear(); } @Test //运行测试 public void TestMyTest() { int result1=TestDemo.myTest(param1,param2,param3);//调用函数,执行测试 assertEquals(result,result1); //判断 } }
8.2 本章总结
8.2.1 介绍内容
l JUnit 4环境的配置。
l JUnit 4测试用例的运行和调试。
l 对代码的详细介绍。
l 对JUnit 4的高级操作。
l 基于路径覆盖的案例分析。
8.2.2 案例
案例 |
所在章节 |
案例8-1:简易的计算器 |
8.1.1 Junit4环境的配置 |
案例8-2:计算一个数的平方 |
8.1.4-4参数化测试 |
案例8-3:路径覆盖测试 |
8.1.6案例分析 |
顾翔凡言:
不是好的工作会给你带来好的心情,而是好的心情会给你带来好的工作。