2017-04-27 46 views
0

我想運行下面的代碼,並得到錯誤的參數數量錯誤。JunitParamsRunner測試

package Homework7; 
import static junitparams.JUnitParamsRunner.$; 
import static org.junit.Assert.*; 
import junitparams.JUnitParamsRunner; 
import junitparams.Parameters; 
import org.junit.Before; 
import org.junit.Test; 
import org.junit.runner.RunWith; 

@RunWith(JUnitParamsRunner.class) 

public class Problem3TestClass { 
    private Problem3Class p3class; 

    @SuppressWarnings("unused") 
    public static final Object[] Problem3TestClass(){ 
     return $(
//    Parameters are: (1, 2) 
//    1 = x,2 = y    
//    Test case 1 
       $(12223,1) 


       ); 
    } 
    @Before 
    public void setUp() { 
     p3class = new Problem3Class(); 
    } 

    @Test 
    @Parameters(method = "Problem3TestClass") 
    public void test(int[] x,int y) 
    { 
     assertEquals(y,p3class.countRepeated(x)); 
    } 

} 

我countRepeated方法通過以下方式

public int countRepeated (int[] x) 

我到底錯在這裏做invocated?

回答

1

根據source

$方法

不應該被用來創建因爲Java解決 VAR-args作爲對象和原語的方式VAR-ARGS陣列,評論。

所以試着改變測試方法來接受整數列表而不是int []。 下面的代碼應該可以工作。

@SuppressWarnings("unused") 
public static final Object[] Problem3TestClass() { 
    List<Integer> x = new ArrayList<Integer>(); 
    int y = 2; 
    return $(x, y); 
} 

@Test 
@Parameters(method = "Problem3TestClass") 
public void test(List<Integer> x, int y) { 
    // update countRepeated to accept List<Integer> or do some conversion here 
    assertEquals(y, p3class.countRepeated(x)); 
} 
0

也建議更改爲列表類型。但是,有時候測試代碼的實現不會改變。要繼續使用int [],可以將其作爲最後一個參數。

public static final Object[] Problem3TestClass(){ 
    return $(
     $(12223, new int[] {12223}), 
     $(6, new int[] {1,2,3}) 
    ); 
} 

和測試用例方法:

@Test 
@Parameters(method = "Problem3TestClass") 
public void test(int y, int[] x) 
{ 
    assertEquals(y, p3class.countRepeated(x)); 
} 

下面是一個使用列表類型以及樣品。

public static final Object[] Problem3TestClass2(){ 
    return $(
     $(Arrays.asList(1,2,3), 6), 
     $(Arrays.asList(1,-4), -3) 
    ); 
} 

測試用例方法:

@Test 
@Parameters(method = "Problem3TestClass2") 
public void test2(List<Integer> x, int y) 
{ 
    assertEquals(y, p3class.countRepeated2(x)); 
} 

附在測試中使用的兩個快速模擬方法。

class Problem3Class{ 
    public int countRepeated (int[] x){ 
     return Arrays.stream(x).sum(); 
    } 
    public int countRepeated2 (List<Integer> x){ 
     return x.stream().reduce(0, (a, b) -> a+b); 
    } 
}