2016-11-18 5 views
-2

私はのassertEqualsによって形成された大規模な(300行)の試験方法、すなわち持っている:複数のJUnitアサーションのコードを減らす方法は?

assertEquals(tmParamResult.get(TagmanConstants.COUNTRY), COUNTRY_UK); 
assertEquals(tmParamResult.get(TagmanConstants.STATE), EMPTY_STRING); 
assertEquals(tmParamResult.get(TagmanConstants.LOYALTY_CARD), String.valueOf(false)); 
assertEquals(tmParamResult.get(TagmanConstants.REGISTERED), String.valueOf(false)); 
assertEquals(tmParamResult.get(TagmanConstants.REG_USER_ID), EMPTY_STRING); 
assertEquals(tmParamResult.get(TagmanConstants.REG_DATE), EMPTY_STRING); 
assertEquals(tmParamResult.get(TagmanConstants.REG_DAY), EMPTY_STRING); 
assertEquals(tmParamResult.get(TagmanConstants.REG_MONTH), EMPTY_STRING); 
assertEquals(tmParamResult.get(TagmanConstants.REG_YEAR), EMPTY_STRING); 
assertEquals(tmParamResult.get(TagmanConstants.SMS_SERVICE), String.valueOf(false)); 
assertEquals(tmParamResult.get(TagmanConstants.IS_INT), String.valueOf(false)); 

はこれをリファクタリングする方法はありますか? (反射、多分?)

ありがとうございます。

+1

配列やリストに定数を入れて、それをループすることができます。 – jurruh

+0

私はそれが必要ではないと思います。これらはテストのためのコードであり、明確です。 –

+0

これらの値は何ですか?デフォルト値?テストメードの目的は何ですか?これをリファクタリングすることで目標は何ですか?それはすでにテストごとに1行で、それを小さくすることはまずありません。また、リフレクションを使用した場合、コード自体をテストするためにコード自体を使用しているので、テストの目的をむしろ無効にすることはありませんか? –

答えて

1

モデルに多くのフィールドがある場合、実際には各フィールド値をチェックする必要はありません。

別のテストケースでtmParamResultインスタンスでequalsアサーションを実行する場合、各フィールドにすべてAssert.assert(...)を書き直す必要があるため、これはおそらく最も適切なソリューションではありません。
パラメータとして期待値と実際のtmParamResultを取るプライベートメソッドを作成することができます。このように、シナリオごとに、シナリオによってはあらかじめ定義された値を使用して別の予想インスタンスを作成する必要があります。

tmParamResultはおそらくマップですが、私は推測したくありません。

@Test 
public void assertTmParamResultEquals(TmParamResult tmParamResultActual,TmParamResult tmParamResultExpected){ 
    assertEquals( 
    tmParamResultExpected.get(TagmanConstants.COUNTRY), 
    tmParamResultActual.get(TagmanConstants.COUNTRY) 
    .... 
) 

UPDATE あなたはMapオブジェクトを使用する場合は、反射に基づく表明を行うためにunitilsライブラリを使用することができます。 ここでは、より多くの情報を見つけることができる:http://www.unitils.org/tutorial-reflectionassert.html

Mavenの依存関係:

<dependency> 
    <groupId>org.unitils</groupId> 
    <artifactId>unitils-test</artifactId> 
    <version>3.4.3</version> 
</dependency> 

それも、地図上の反射アサーションを実行することができます。ここで

は単純な例である:最初の命題で

@Test 
public void assertMap() throws Exception { 
    Map<String, String> expectedMap = new HashMap<String, String>(); 
    expectedMap.put("a", "1"); 
    expectedMap.put("b", "2"); 

    Map<String, String> actualMap = new HashMap<String, String>(); 
    actualMap.put("b", "2"); 
    actualMap.put("a", "1"); 

    ReflectionAssert.assertReflectionEquals(expectedMap, actualMap, ReflectionComparatorMode.LENIENT_ORDER); 

} 

、あなたはこのように主張を行う与えることができる。このような大規模な試験方法を持つ

@Test 
public void assertTmParamResultEquals(TmParamResult tmParamResultActual,TmParamResult tmParamResultExpected){ 
    ReflectionAssert.assertReflectionEquals(tmParamResultExpected, tmParamResultActual, ReflectionComparatorMode.LENIENT_ORDER); 
) 
0

は私に表示されますテスト中のクラスまたはメソッドが多すぎることを示します。離れて分解して、テスト方法が簡単になります。

関連する問題