2016-04-15 18 views
0

パラメータ化されたテストは、テストに使用するために異なるデータを持つことをお勧めします。しかし、私はパラメータ化されたテストを作成したいサンプルの電卓を作成しました。しかし、私はあなたが1つのテストのために1セットのパラメータ化されたデータを作成することができることを発見しました。複数のテストでパラメータ化されたjunitテスト

2つの数値に期待される結果を追加するためのパラメータ化テストを作成しました。期待される結果が異なるため、このデータは減算では機能しません。

加算、減算、乗算、除算の各テストでパラメータ化されたデータを使用できますか?任意の提案のための

多くのおかげで、JUnitの4で

@RunWith(Parameterized.class) 
public class CalculatorModelPresenterTest { 

    private CalculatorModel mCalculatorModel; 

    /* Array of tests */ 
    @Parameterized.Parameters 
    public static Collection<Object[]> data() { 
     return Arrays.asList(new Object[][]{ 
       {3.0, 4.0, 7.0}, 
       {4.0, 3.0, 7.0}, 
       {8.0, 2.0, 10.0}, 
       {-1.0, 4.0, 3.0}, 
       {3256.0, 4.0, 3260.0} 
     }); 
    } 

    private double mNumberOne; 
    private double mNumberTwo; 
    private double mExpectedResult; 

    /* CONSTRUCTOR THAT ASSIGNS THE FIELDS WITH THE TEST DATA */ 
    public CalculatorModelPresenterTest(double numberOne, double numberTwo, double expectedResult) { 
     mNumberOne = numberOne; 
     mNumberTwo = numberTwo; 
     mExpectedResult = expectedResult; 
    } 

    /* THIS TEST WILL PASS AS THE TEST DATA IS FOR ADDING */ 
    @Test 
    public void testAdd() throws Exception { 
     final double actualResult = mCalculatorModel.add(mNumberOne, mNumberTwo); 
     assertEquals(actualResult, mExpectedResult, 0); 
    } 

    /* HOWEVER, THIS TEST WILL ALWAYS FAIL AS THE TEST DATA IS CUSTOMIZED FOR THE ADD */ 
    @Test 
    public void testSub() throws Exception { 
     final double actualResult = mCalculatorModel.sub(mNumberOne, mNumberTwo); 
     assertEquals(actualResult, mExpectedResult, 0); 
    } 

    @Before 
    public void setUp() throws Exception { 
     mCalculatorModel = new CalculatorModel(); 
    } 

    @After 
    public void tearDown() throws Exception { 
     mCalculatorModel = null; 
    } 
} 
+0

あなたは' tearDown'方法でnull'なので 'に' mCalculatorModel'を設定する必要はありません。 –

答えて

1

ただ、このように別のパラメータを追加します。あなたは、それぞれが異なるパラメータセットを持って、各テストのための内部クラスを記述し、Enclosedランナーでそれを実行することができ

return Arrays.asList(new Object[][]{ 
      {3.0, 4.0, 7.0, -1.0}, 
      {4.0, 3.0, 7.0, 1.0}, 
      {8.0, 2.0, 10.0, 6.0}, 
      {-1.0, 4.0, 3.0, -5.0}, 
      {3256.0, 4.0, 3260.0, 3252.0} 
    }); 

... 

private double mExpectedSubResult; 

/* CONSTRUCTOR THAT ASSIGNS THE FIELDS WITH THE TEST DATA */ 
public CalculatorModelPresenterTest(double numberOne, double numberTwo, double expectedResult, double expectedSubResult) { 
    mNumberOne = numberOne; 
    mNumberTwo = numberTwo; 
    mExpectedResult = expectedResult; 
    mExpectedSubResult = expectedSubResult; 
} 
... 

/* THIS TEST WILL NOW PASS */ 
@Test 
public void testSub() throws Exception { 
    final double actualResult = mCalculatorModel.sub(mNumberOne, mNumberTwo); 
    assertEquals(actualResult, mExpectedSubResult, 0); 
} 
+0

それはうまくいった。配列にパラメータを追加し続けるだけでいいです。ありがとう。 – ant2009

1

複数@Parametersメソッドを持つことはできません。新しいパラメータを使用して、操作ごとに新しいクラスを追加する必要があります。

+0

それは私が考えていたものですが、簡単なテストをするためにクラスを追加し続けたくありませんでした。 – ant2009

1

@RunWith(Enclosed.class) 
public class CalculatorModelPresenterTest { 

    @RunWith(Parameterized.class) 
    public static class Sum { 

     @Parameterized.Parameters 
     public static Object[][] data() { 
      return new Object[][]{ 
       {3.0, 4.0, 7.0}, 
       {4.0, 3.0, 7.0}, 
       {8.0, 2.0, 10.0}, 
       {-1.0, 4.0, 3.0}, 
       {3256.0, 4.0, 3260.0} 
      }; 
     } 

     @Parameterized.Parameter(0) 
     private double mNumberOne; 
     @Parameterized.Parameter(1) 
     private double mNumberTwo; 
     @Parameterized.Parameter(2) 
     private double mExpectedResult; 

     @Test 
     public void testAdd() throws Exception { 
      CalculatorModel calculatorModel = new CalculatorModel(); 
      double actualResult = calculatorModel.add(mNumberOne, mNumberTwo); 
      assertEquals(actualResult, mExpectedResult, 0); 
     } 
    } 

    @RunWith(Parameterized.class) 
    public static class Difference { 

     @Parameterized.Parameters 
     public static Object[][] data() { 
      return new Object[][]{ 
       {3.0, 4.0, -1.0}, 
       {4.0, 3.0, 1.0}, 
       {8.0, 2.0, 6.0}, 
       {-1.0, 4.0, -5.0}, 
       {3256.0, 4.0, 3252.0} 
      }; 
     } 

     @Parameterized.Parameter(0) 
     private double mNumberOne; 
     @Parameterized.Parameter(1) 
     private double mNumberTwo; 
     @Parameterized.Parameter(2) 
     private double mExpectedResult; 

     @Test 
     public void testSub() throws Exception { 
      CalculatorModel calculatorModel = new CalculatorModel(); 
      double actualResult = calculatorModel.sub(mNumberOne, mNumberTwo); 
      assertEquals(actualResult, mExpectedResult, 0); 
     } 
    } 
} 

代わりの方法は、JUnitParamsランナーを使用することです。 JUnitのは、パラメータのセットごとにクラス `CalculatorModelPresenterTest`の新しいインスタンスを作成するため

@RunWith(JUnitParamsRunner.class) 
public class CalculatorModelPresenterTest { 

    @Test 
    @Parameters({ 
      "3.0, 4.0, 7.0", 
      "4.0, 3.0, 7.0", 
      "8.0, 2.0, 10.0", 
      "-1.0, 4.0, 3.0", 
      "3256.0, 4.0, 3260.0" }) 
    public void testAdd(double first, double second, double expectedResult) 
      throws Exception { 
     CalculatorModel calculatorModel = new CalculatorModel(); 
     double actualResult = calculatorModel.add(first, second); 
     assertEquals(actualResult, expectedResult, 0); 
    } 

    @Test 
    @Parameters({ 
      "3.0, 4.0, -1.0", 
      "4.0, 3.0, 1.0", 
      "8.0, 2.0, 6.0", 
      "-1.0, 4.0, -5.0", 
      "3256.0, 4.0, 3252.0" }) 
    public void testSub(double first, double second, double expectedResult) 
      throws Exception { 
     CalculatorModel calculatorModel = new CalculatorModel(); 
     double actualResult = calculatorModel.sub(first, second); 
     assertEquals(actualResult, expectedResult, 0); 
    } 
} 
関連する問題