JUnit教程| Java测试框架

本文概述

  • 单元测试的类型
  • 断言课
  • Eclipse IDE中的简单JUnit示例
  • Junit框架的另一个示例
JUnit教程通过示例提供了Java单元测试的基本和高级概念。我们的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类的常用方法如下:
  1. void assertEquals(期望的布尔值, 布尔的实际值):检查两个基元/对象是否相等。它超载了。
  2. void assertTrue(boolean condition):检查条件是否为真。
  3. void assertFalse(boolean condition):检查条件是否为假。
  4. void assertNull(Object obj):检查对象是否为null。
  5. void assertNotNull(Object obj):检查对象是否不为null。
所需的jar文件 你需要加载junit4.jar和hamcrest-core.jar文件。
下载junit jar文件
Eclipse IDE中的简单JUnit示例 让我们看看这个例子的目录结构。
JUnit教程| Java测试框架

文章图片
编写程序逻辑 让我们编写逻辑来查找数组的最大数目。
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中显示的输出。
JUnit教程| Java测试框架

文章图片
如你所见, 当我们传递负值时, 它将引发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教程| Java测试框架

文章图片
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

    推荐阅读