本文概述
- 单元测试的类型
- 断言课
- Eclipse IDE中的简单JUnit示例
- Junit框架的另一个示例
它是针对Java程序员的开源测试框架。 Java程序员可以创建测试用例并测试他/她自己的代码。
【JUnit教程| Java测试框架】它是单元测试框架之一。当前版本是junit 4。
要执行单元测试, 我们需要创建测试用例。单元测试用例是确保程序逻辑按预期工作的代码。
org.junit软件包包含许多用于junit测试的接口和类, 例如Assert, Test, Before, After等。
单元测试的类型 有两种执行单元测试的方法:1)手动测试2)自动测试。
1)手动测试 如果你在没有任何工具支持的情况下手动执行测试用例, 则称为手动测试。这是耗时的并且较不可靠。
2)自动化测试 如果通过工具支持执行测试用例, 则称为自动测试。它既快速又可靠。
Junit测试的批注 Junit 4.x框架基于注释, 因此让我们看一下在编写测试用例时可以使用的注释。
@Test批注指定该方法为测试方法。
@Test(timeout = 1000)注释指定如果方法花费的时间超过1000毫秒(1秒), 则该方法将失败。
@BeforeClass批注指定在开始所有测试之前, 该方法仅被调用一次。
@Before注释指定在每次测试之前将调用该方法。
@After注释指定在每次测试后将调用该方法。
@AfterClass批注指定在完成所有测试之后, 该方法将仅被调用一次。
断言课 org.junit.Assert类提供断言程序逻辑的方法。
断言方法 Assert类的常用方法如下:
- void assertEquals(期望的布尔值, 布尔的实际值):检查两个基元/对象是否相等。它超载了。
- void assertTrue(boolean condition):检查条件是否为真。
- void assertFalse(boolean condition):检查条件是否为假。
- void assertNull(Object obj):检查对象是否为null。
- void assertNotNull(Object obj):检查对象是否不为null。
下载junit jar文件
Eclipse IDE中的简单JUnit示例 让我们看看这个例子的目录结构。
文章图片
编写程序逻辑 让我们编写逻辑来查找数组的最大数目。
package com.srcmini.logic;
public class Calculation { public static int findMax(int arr[]){
int max=0;
for(int i=1;
i<
arr.length;
i++){
if(max<
arr[i])
max=arr[i];
}
return max;
}
}
编写测试用例 在这里, 我们使用的是JUnit 4, 因此不需要继承TestCase类。主要的测试代码是用testFindMax()方法编写的。但是, 正如你在给定程序中看到的那样, 我们还可以在每次测试之前和之后执行一些任务。
package com.srcmini.testcase;
import static org.junit.Assert.*;
import com.srcmini.logic.*;
import org.junit.Test;
public class TestLogic { @Test
public void testFindMax(){
assertEquals(4, Calculation.findMax(new int[]{1, 3, 4, 2}));
assertEquals(-1, Calculation.findMax(new int[]{-12, -1, -3, -4, -2}));
}
}
要运行此示例, 请右键单击TestLogic类-> Run As-> 1Junit Test。
Output:Assertion Error
让我们看看eclipse IDE中显示的输出。
文章图片
如你所见, 当我们传递负值时, 它将引发AssertionError, 因为第二次findMax()方法返回0而不是-1。这意味着我们的程序逻辑不正确。
正确的程序逻辑 如你所见, 为给定数组查找最大数目的程序逻辑是不正确的, 因为在负值的情况下它不会返回-1。正确的程序逻辑如下:
package com.srcmini.logic;
public class Calculation { public static int findMax(int arr[]){
int max=arr[0];
//arr[0] instead of 0
for(int i=1;
i<
arr.length;
i++){
if(max<
arr[i])
max=arr[i];
}
return max;
}
}
如果再次运行junit程序, 将看到以下输出。
文章图片
Junit框架的另一个示例 编写程序代码
package com.srcmini.logic;
public class Calculation {
//method that returns maximum number
public static int findMax(int arr[]){
int max=0;
for(int i=1;
i<
arr.length;
i++){
if(max<
arr[i])
max=arr[i];
}
return max;
}
//method that returns cube of the given number
public static int cube(int n){
return n*n*n;
}
//method that returns reverse words
public static String reverseWord(String str){StringBuilder result=new StringBuilder();
StringTokenizer tokenizer=new StringTokenizer(str, " ");
while(tokenizer.hasMoreTokens()){
StringBuilder sb=new StringBuilder();
sb.append(tokenizer.nextToken());
sb.reverse();
result.append(sb);
result.append(" ");
}
return result.toString();
}
}
编写测试用例
package com.srcmini.testcase;
import static org.junit.Assert.assertEquals;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import com.srcmini.logic.Calculation;
public class TestCase2 { @BeforeClass
public static void setUpBeforeClass() throws Exception {
System.out.println("before class");
}
@Before
public void setUp() throws Exception {
System.out.println("before");
} @Test
public void testFindMax(){
System.out.println("test case find max");
assertEquals(4, Calculation.findMax(new int[]{1, 3, 4, 2}));
assertEquals(-2, Calculation.findMax(new int[]{-12, -3, -4, -2}));
}
@Test
public void testCube(){
System.out.println("test case cube");
assertEquals(27, Calculation.cube(3));
}
@Test
public void testReverseWord(){
System.out.println("test case reverse word");
assertEquals("ym eman si nahk", Calculation.reverseWord("my name is khan");
}
@After
public void tearDown() throws Exception {
System.out.println("after");
} @AfterClass
public static void tearDownAfterClass() throws Exception {
System.out.println("after class");
}}
Output:before class
before
test case find max
after
before
test case cube
after
before
test case reverse word
after
after class
推荐阅读
- Windows和MAC平台的10个最佳VMWare替代方案
- Mac 11大最佳重复照片查找和删除应用程序合集
- 面向设计师的17大平面设计软件合集(免费和付费)
- win8.1系统中的性能监视器中查看日志数的技巧
- Win8.1系统中在性能监视器中添加计数器的技巧
- Win8.1系统下如何打开计划数据收集器的技巧
- Win8.1系统中针对未响应的程序该如何结束
- 强烈建议在win8.1系统里把无用的服务停用
- 深度解析Windows 8系统桌面组件的全方位介绍