2013-03-04 8 views
12

Я создаю приложение Java на основе JRE 6. Я использую JUnit 4 для создания параметризованных тестов. Я получаю эту ошибку:Java JUnit Параметрированная ошибка

The annotation @Parameterized.Parameters must define the attribute value

на строке, содержащей аннотацию:

@Parameterized.Parameters 

Ниже приведен код, я считаю уместным к этому вопросу:

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

мне удалось найти некоторые связанные вопросы, такие как this. К сожалению, в моей ситуации они не помогают.

То, что я пытался и не получилось:

  • удаления "проходит BasicCalculatorTest" из класса декларации

  • добавляющие функции тестирования, которые используют @test аннотацию

  • импорт org.junit.runners. Параметрирование и использование @Parameters вместо @ Parameterized.Parameters

Мне нужно упомянуть, что я использовал очень похожую реализацию (в первую очередь аннотации и testGenerator()) в другом проекте без каких-либо проблем. Реализация следует за учебниками, доступными в Интернете, например this, this и this.

Любая помощь при решении этой проблемы очень ценится.

+2

'@ Parameterized.Parameters (value =/* required here * /)' ошибка говорит, что атрибут 'значение' является обязательным. –

+0

@PaulBellora, это была просто опечатка, спасибо, что указали это, я исправил ее, но проблема все еще остается. –

+0

@BheshGurung, я знаю, что это говорит об этом, но я использовал его в другом проекте без (value =/* required here * /), и он работал отлично. Кроме того, ни один из связанных с ним руководств не использует это. –

ответ

1

попробовать это:

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

выход:

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

Проблема возникает и в этом коде. –

+0

это отлично работает для меня, используя jdk7 и eclipse на выигрыше 7 x64 –

+0

Я забыл расширить базовый тестовый пример. Я сделал это редактирование и добавил результат. –

0

Это должно быть, потому что вы расширяете BaseTestCase. Я скопировал ваш код, не переходя из базового класса, тесты прошли правильно.

Try вызова super.setUp() в установке

Э.Г.

@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

Вы пропустите импорт ниже, я думаю.

import org.junit.runners.Parameterized.Parameters; 
Смежные вопросы