鍍金池/ 教程/ Java/ JUnit4參數(shù)化測(cè)試實(shí)例
JUnit教程
使用Eclipse的JUnit實(shí)例
Eclipse JUnit簡(jiǎn)單示例
JUnit4忽略(Ignore)測(cè)試實(shí)例
創(chuàng)建參數(shù)化測(cè)試
JUnit介紹,JUnit是什么?
JUnit4時(shí)間(超時(shí))測(cè)試實(shí)例
JUnit規(guī)則
2.預(yù)期異常測(cè)試
JUnit套件測(cè)試實(shí)例
使用@Ignore注解
JUnit4參數(shù)化測(cè)試實(shí)例
在命令行中運(yùn)行JUnit測(cè)試
6.參數(shù)化測(cè)試實(shí)例
JUnit4測(cè)試方法異常拋出實(shí)例
JUnit4 基本用法實(shí)例
3.忽略(Ignore)測(cè)試實(shí)例
創(chuàng)建套件測(cè)試
JUnit注解
4.測(cè)試(超時(shí)返回)時(shí)間
JUnit斷言

JUnit4參數(shù)化測(cè)試實(shí)例

在JUnit中,可以同時(shí)使用@RunWith 和 @parameter 注解來(lái)為單元測(cè)試傳遞參數(shù)。

注意:

在Eclipse中因?yàn)榘姹締?wèn)題,可能無(wú)法使用@parameters(name = "xxx"),詳見(jiàn)解決辦法(文章的最后部分: IDE Bug - Eclipse):

 https://github.com/junit-team/junit/wiki/Parameterized-tests

1. MathUtils – 參數(shù)化測(cè)試

查看一個(gè)簡(jiǎn)單的 add 方法。

MathUtils.java

package com.yiibai.match.utils;

public class MathUtils {

	public static int add(int a, int b) {
		return a + b;
	}

}

這里有一個(gè)為上面的JUnit測(cè)試類(lèi),閱讀不言自明的注釋。

MathUtilsTest.java

package com.yiibai.match.utils;

import static org.junit.Assert.assertEquals;
import java.util.Arrays;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;

@RunWith(value = Parameterized.class)
public class MathUtilsTest {

	private int numberA;
	private int numberB;
	private int expected;

	//parameters pass via this constructor
	public MathUtilsTest(int numberA, int numberB, int expected) {
		this.numberA = numberA;
		this.numberB = numberB;
		this.expected = expected;
	}

	//Declares parameters here
	@Parameters(name = "{index}: add({0}+{1})={2}")
	public static Iterable<Object[]> data1() {
		return Arrays.asList(new Object[][] { 
			{ 1, 1, 2 }, 
			{ 2, 2, 4 }, 
			{ 8, 2, 10 }, 
			{ 4, 5, 9 } 
		});
	}

	@Test
	public void test_add() {	
		assertEquals(expected,MathUtils.add(numberA, numberB));
	}

}


什么是 {0}, {1} 和 {2}?
如果參數(shù)是 “{ 3, 4, 7 }”, 那么 {0} = 3, {1} = 4, {2} = 7. 請(qǐng)參考以下的輸出:

2. DomainUtils – 參數(shù)化測(cè)試

查看域名驗(yàn)證程序。

DomainUtils.java

package com.yiibai.regex.utils;

import java.util.regex.Pattern;

public class DomainUtils {

	private static Pattern pDomainName;

	private static final String DOMAIN_NAME_PATTERN = "^((?!-)[A-Za-z0-9-]{1,63}(?<!-)\\.)+[A-Za-z]{2,6}$";

	static {
		pDomainName = Pattern.compile(DOMAIN_NAME_PATTERN);
	}

	//is this a valid domain name?
	public static boolean isValidDomainName(String domainName) {
		return pDomainName.matcher(domainName).find();
	}

}


這里有一個(gè) JUnit 測(cè)試上面的類(lèi)。

DomainUtilsTest.java

package com.yiibai.regex.utils;

import static org.junit.Assert.assertEquals;
import java.util.Arrays;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;

@RunWith(value = Parameterized.class)
public class DomainUtilsTest {

	private String domain;
	private boolean expected;

	public DomainUtilsTest(String domain, boolean expected) {
		this.domain = domain;
		this.expected = expected;
	}

	@Parameters(name= "{index}: isValid({0})={1}")
 	public static Iterable<Object[]> data() {
 		return Arrays.asList(new Object[][] { 
 		{ "google.com", true },
		{ "yiibai.com", true },
                { "-yiibai.com", false },
                { "yiibai-.com", false },
                { "3423kjk", false },
                { "mk#$kdo.com", false }
            }
 	);
     }

	@Test
	public void test_validDomains() {
		assertEquals(expected,DomainUtils.isValidDomainName(domain));
	}

}


輸出結(jié)果:

完成


不需要必須去遵循“JUnit”聲明參數(shù)提供者的方式,并把它傳遞到通過(guò)構(gòu)造單元測(cè)試。如果和TestNG比較,TestNG更加靈活,傳遞參數(shù)為單元測(cè)試的方式。