![](/img/trans.png)
[英]Parametrized JUnit Test with @MethodSource with method that returns an ArrayList
[英]JUnit test with parametrized method
這是一個單元測試類:
MyUnitTestSetup myUnitTestSetup ;
public void setUp(String myParam){
myUnitTestSetup = new MyUnitTestSetup(myParam);
}
@Test
public void test1(){
setUp("value1");
//do some stuff with myParam = "value1";
}
@Test
public void test2(){
setUp("value2");
//do some stuff with myParam = "value2";
}
我想用“ value1”執行test1,用“ value2”執行test2。 參數化單元測試不方便,因為它們將對“ value1”和“ value2”執行test1,而對“ value1”和“ value2”執行test2,這不是我想要的。
我雖然:
使用@Rule注釋:
static String myParam; MyUnitTestSetup myUnitTestSetup ; @Before public void setUp(){ myUnitTestSetup = new MyUnitTestSetup(myParam); } @Rule public TestRule rule = new TestRule() { @Override public Statement apply(final Statement base, final Description desc) { return new Statement() { @Override public void evaluate() throws Throwable { if(desc.getMethodName().equals("test1")) myParam = "value1"; ... } }; } } @Test public void test1(){ //do some stuff with myParam = "value1"; } @Test public void test2(){ //do some stuff with myParam = "value2"; }
但是我想知道是否有一種更清潔,更智能的方式來做到這一點。 我會想到類似的東西:
MyUnitTestSetup myUnitTestSetup ;
@Before
public void setUp(String myParam){
myUnitTestSetup = new MyUnitTestSetup(myParam);
}
@Test(myParam="value1")
public void test1(){
//do some stuff with myParam = "value1";
}
@Test(myParam="value2")
public void test2(){
//do some stuff with myParam = "value2";
}
任何想法 ?
我在這里想念什么嗎? 為什么不將其設置為測試調用中的第一件事,還是調用設置方法的方法呢?
@Test
public void test1(){
myParam = "value1"; //set the value?
...
}
@Test
public void test2(){
setupMyParam("value2"); // or this?
...
}
不確定是否可以使用TestNG ,但是如果可以的話,TestNG允許您1)將參數直接傳遞給測試方法,以及2)為每個類定義所需數量的數據提供程序。 例如:
@DataProvider
public Object[][] dp1() {
return new Object[][] {
new Object[] { "value1"};
}
}
@Test(dataProvider = "dp1")
public void test1(String value) {
// will receive "value1"
}
@DataProvider
public Object[][] dp2() {
return new Object[][] {
new Object[] { "value2"};
}
}
@Test(dataProvider = "dp2")
public void test2(String value) {
// will receive "value2"
}
看一下JUnitParams庫。 有了它,您可以執行以下操作:
@Test
@Parameters({ new MyUnitTestSetup("value1") })
public void test1(MyUnitTestSetup myUnitTestSetup1) {
// do some stuff with myUnitTestSetup1
}
@Test
@Parameters({ new MyUnitTestSetup("value2") })
public void test2(MyUnitTestSetup myUnitTestSetup2) {
// do some stuff with myUnitTestSetup2
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.