个性化阅读
专注于IT技术分析

JUnit教程| Java测试框架

本文概述

JUnit教程通过示例提供了Java单元测试的基本和高级概念。我们的junit教程专为初学者和专业人士设计。

它是针对Java程序员的开源测试框架。 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示例

让我们看看这个例子的目录结构。

Eclipse中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中显示的输出。

带输出的Eclipse中的junit示例

如你所见, 当我们传递负值时, 它将引发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框架示例

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
赞(0)
未经允许不得转载:srcmini » JUnit教程| Java测试框架

评论 抢沙发

评论前必须登录!