天天看點

Junit入門到掌握-15-JUnit進階-Theories

這篇學習注解@Theory和@DataPoint, 這個和Parameters一樣,屬于資料驅動範疇。

1.Theory

Junit入門到掌握-15-JUnit進階-Theories

@DataPoint标注的也是一個靜态方法,裡面有資料源。如果是@DataPoint表示一個資料,如果是@DataPoints表示一組資料,一般用@DataPoints

2.demo練習

新建立一個測試類,代碼如下

package test;

import static org.junit.Assert.assertTrue;

import org.junit.experimental.theories.DataPoints;
import org.junit.experimental.theories.Theories;
import org.junit.experimental.theories.Theory;
import org.junit.runner.RunWith;

import com.anthony.protein.TrackingService;

@RunWith(Theories.class)
public class TheoryTests {
	
	@DataPoints
	public static int[] data() {
		return new int[] {
				1, 5, 10, 50, 4
		};
	}
	
	@Theory
	public void testThory(int value) {
		TrackingService ts = new TrackingService();
		ts.addProtein(value);
		
		assertTrue(ts.getTotal() > 0);
	}
}
           

運作以下,出現失敗,是因為有一個value=-4,是以失敗,可以把這個負數改成正數就運作成功。或者這裡可以使用Assume方法來過濾到不符合條件的測試結果,這樣也能運作成功。

package test;

import static org.junit.Assert.assertTrue;

import org.junit.Assume;
import org.junit.experimental.theories.DataPoints;
import org.junit.experimental.theories.Theories;
import org.junit.experimental.theories.Theory;
import org.junit.runner.RunWith;

import com.anthony.protein.TrackingService;

@RunWith(Theories.class)
public class TheoryTests {
	
	@DataPoints
	public static int[] data() {
		return new int[] {
				1, 5, 10, 50, -4
		};
	}
	
	@Theory
	public void testThory(int value) {
		TrackingService ts = new TrackingService();
		ts.addProtein(value);
		// assume的作用是不執行一些不符合條件的組合,一般和theoryies一起使用
		Assume.assumeTrue(value>0);
		assertTrue(ts.getTotal() > 0);
	}
}
           

這個@Theory和@Parameters确實有一點像,可以回去複習下https://blog.csdn.net/u011541946/article/details/95009227

雖然@Theory不常用,我個人認為@Theory比@Parameters好處在于,在@Parameters中運作報錯,沒有顯式告訴你資料源中哪一個參數運作出了問題。下面直接指出了-4這個資料失敗。

Junit入門到掌握-15-JUnit進階-Theories