2013-03-04 20 views
12

Tworzę aplikację Java opartą na JRE 6. Używam JUnit 4 do generowania sparametryzowanych testów. Otrzymuję ten błąd:Java JUnit Sparametryzowany błąd

The annotation @Parameterized.Parameters must define the attribute value

na linii zawierającej adnotację:

@Parameterized.Parameters 

Poniżej znajduje się kod uważam za istotne dla tej kwestii:

import static org.junit.Assert.assertEquals; 

import java.util.Arrays; 
import java.util.Collection; 

import org.junit.Before; 
import org.junit.Test; 
import org.junit.runner.RunWith; 
import org.junit.runners.Parameterized; 

import calc.CalculatorException; 
import calc.ScientificCalculator; 

@RunWith(Parameterized.class) 
public class ScientificCalculatorTest extends BasicCalculatorTest{ 

    /** Provides an interface to the scientific features of the calculator under test */ 
    private ScientificCalculator sciCalc; 
    private double a, b; 


    @Before 
    @Override 
    public void setUp() throws Exception { 
     sciCalc = new ScientificCalculator(); 
     //Make sure that the basic functionality of the extended calculator 
     //hasn't been broken. 
     theCalc = sciCalc; 
    } 

    /** 
    * Constructor. Is executed on each test and sets the test values to each pair in the data sets. 
    * @param nr1 the first number in the tested pair. 
    * @param nr2 the second number in the tested pair. 
    */ 
    public ScientificCalculatorTest(double nr1, double nr2){ 
     a = nr1; 
     b = nr2; 
    } 


    @Parameterized.Parameters 
    public static Collection<Object[]> testGenerator() { 
     return Arrays.asList(new Object[][] { 
       //General integer values | -/+ combinations 
       { -100, -100}, 
       { -100, 100}, 
       { 100, -100}, 
       { 100, 100} 
     }); 
    } 

udało mi się znajdź kilka powiązanych ze sobą pytań, takich jak this. Niestety, w mojej sytuacji nie pomagają.

Co próbowałem i nie działa:

  • usuwając "rozciąga BasicCalculatorTest" z deklaracji klasy

  • Dodawanie funkcji testowych, które używają @Test adnotacji

  • importowanie org.junit.runners.Parametryzowane i użycie @Parameters zamiast @ Parameterized.Parameters

Muszę wspomnieć, że użyłem bardzo podobnej implementacji (w szczególności adnotacji i testGenerator()) w innym projekcie bez żadnych problemów. Implementacja przebiega zgodnie z samouczkami dostępnymi online, takimi jak this, this i this.

Każda pomoc w rozwiązaniu tego błędu jest bardzo doceniana.

+2

'@ Parameterized.Parameters (wartość =/* wymagana tutaj * /)' błąd mówi, że atrybut 'value' jest obowiązkowy. –

+0

@PaulBellora, to był tylko literówka, dzięki za wskazanie, poprawiłem to, ale problem nadal istnieje. –

+0

@ BheshGurung, wiem, że to mówi, ale użyłem go w innym projekcie bez (value =/* wymagane tutaj * /) i działało dobrze. Żaden z tutoriali, które dołączyłem, nie używa tego. –

Odpowiedz

1

spróbuj tego:

import java.util.Arrays; 
import java.util.Collection; 

import org.junit.Test; 
import org.junit.runner.RunWith; 
import org.junit.runners.Parameterized; 
import org.junit.runners.Parameterized.Parameters; 
public class So15213068 { 
    public static class BaseTestCase { 
     @Test public void test() { 
      System.out.println("base class test"); 
     } 
    } 
    @RunWith(Parameterized.class) public static class TestCase extends BaseTestCase { 
     public TestCase(Double nr1,Double nr2) { 
      //super(nr1,nr2); 
      this.nr1=nr1; 
      this.nr2=nr2; 
     } 
     @Test public void test2() { 
      System.out.println("subclass test "+nr1+" "+nr2); 
     } 
     @Parameters public static Collection<Object[]> testGenerator() { 
      return Arrays.asList(new Object[][]{{-100.,-100.},{-100.,100.},{100.,-100.},{100.,100.}}); 
     } 
     double nr1,nr2; 
    } 
} 

wyjściowa:

subclass test -100.0 -100.0 
base class test 
subclass test -100.0 100.0 
base class test 
subclass test 100.0 -100.0 
base class test 
subclass test 100.0 100.0 
base class test 
+0

Problem występuje również w tym kodzie. –

+0

to działa dobrze dla mnie za pomocą jdk7 i eclipse na wygraną 7 x64 –

+0

i zapomniałem rozszerzyć podstawowy przypadek testowy. zrobiłem tę edycję i dodałem dane wyjściowe. –

0

To musi być, ponieważ rozciągają BaseTestCase. Skopiowałem twój kod bez rozszerzenia z klasy bazowej, testy przebiegły poprawnie.

Spróbuj zadzwonić super.setUp() w konfiguracji

Np

@Before 
@Override 
public void setUp() throws Exception { 
    super.setUp(); 
    sciCalc = new ScientificCalculator(); 
    //Make sure that the basic functionality of the extended calculator 
    //hasn't been broken. 
    theCalc = sciCalc; 
} 
1

Tęsknisz za tym importem, myślę.

import org.junit.runners.Parameterized.Parameters;