2017-04-27 1 views
0

Ich versuche, den folgenden Code auszuführen, und ich bekomme eine falsche Anzahl von Argumenten Fehler.JunitParamsRunner Test

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)); 
    } 

} 

Mein countRepeated Methode wird in der folgenden Art und Weise invocated

public int countRepeated (int[] x) 

Was ich hier falsch mache?

Antwort

1

Nach dem Kommentar in source

$ method

sollte nicht verwendet werden var-args-Arrays, wegen der Art, Java löst var-args für Objekte und Primitiven zu erstellen.

Versuchen Sie also, die Testmethode so zu ändern, dass anstelle von int [] eine Ganzzahl akzeptiert wird. Der folgende Code sollte funktionieren.

@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

Auch empfehlen, auf Listentyp zu wechseln. Manchmal werden die Implementierungen für Testcodes jedoch nicht geändert. Um int [] zu verwenden, können Sie es als letzten Parameter beibehalten.

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

und die Testfall-Methode:

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

Unten ist die Probe als auch Listentyp zu verwenden.

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

Testfall-Methode:

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

die beiden Schnell mock-Methoden in Test verwendet angebaute.

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); 
    } 
}