2016-12-04 11 views
0

JUnitで作業してください。テストクラスのJUnit:@Parametersの冗長/繰り返しデータを避けるにはどうすればよいですか? (リファクタリング)

私は2つのインスタンス変数があります。

private final Locale locale; 
private final PersonaValidationUpdate personaUpdateInvalid; 

これらの値は@Parametersによって定義されています。もちろん、私が使用@Test方法

の両方で使用する意思を持つ:

@Parameters(name="{index}: Locale: ''{0}'' - ''{1}'' ") 
    public static Collection<Object[]> data() { 
     return Arrays.asList(new Object[][]{ 
      { ClientUserLocale.ENGLISH.getLocale(), PersonaValidationUpdate.NULL}, 
      { ClientUserLocale.ENGLISH.getLocale(), PersonaValidationUpdate.EMPTY}, 
      { ClientUserLocale.ENGLISH.getLocale(), PersonaValidationUpdate.MIN}, 
      { ClientUserLocale.ENGLISH.getLocale(), PersonaValidationUpdate.MAX}, 

      { ClientUserLocale.PORTUGUESE.getLocale(), PersonaValidationUpdate.NULL}, 
      { ClientUserLocale.PORTUGUESE.getLocale(), PersonaValidationUpdate.EMPTY}, 
      { ClientUserLocale.PORTUGUESE.getLocale(), PersonaValidationUpdate.MIN}, 
      { ClientUserLocale.PORTUGUESE.getLocale(), PersonaValidationUpdate.MAX}, 

      { ClientUserLocale.SPANISH.getLocale(), PersonaValidationUpdate.NULL}, 
      { ClientUserLocale.SPANISH.getLocale(), PersonaValidationUpdate.EMPTY}, 
      { ClientUserLocale.SPANISH.getLocale(), PersonaValidationUpdate.MIN}, 
      { ClientUserLocale.SPANISH.getLocale(), PersonaValidationUpdate.MAX} 
     }); 
    } 

作品上記のコードは、冗長である場合でも、我々は新しいLocale(つまり追加した場合を想像:日本)。私は新しいブロックを追加し、繰り返す必要があります。ClientUserLocale.JAPANESE.getLocale() 回。

上記のコードを減らす方法はありますか?

私の目標は、上記の各項目について、私のClientUserLocale列挙を通じて利用可能なすべてのLocale秒間テストされるべきテスト

PersonaValidationUpdate.NULL 
PersonaValidationUpdate.EMPTY 
PersonaValidationUpdate.MIN 
PersonaValidationUpdate.MAX 

です。この場合、私は3つしか定義されていません。

+0

何をスニペット「NULL」、「EMPTY」、「MAX」、「MIN」のそれぞれについて?このようにして、新しいenum値を追加または削除しても、コードは決して変更されません... – Morfic

+0

こんにちは、 'PersonaValidationUpdate'は、それぞれのケースまたはシナリオに従って無効なエンティティを作成する別の列挙型です。可能であれば、より良い理解を得るためのコードを参照してください? –

+0

'PersonaValidationUpdate'もenumであるならば、それはもっと簡単かもしれません。私の答えを下に見て、あなたの考え/疑問を教えてください。 – Morfic

答えて

1

免責事項:コードがコンパイルされないことがあり、それがちょうどOPの説明とコードに基づいて書かれている `ClientUserLocale`値をループして、リストに新しい項目を追加する方法について


@Parameters(name = "{index}: Locale: ''{0}'' - ''{1}'' ") 
public static Collection<Object[]> data() { 
    List<Object[]> data = new ArrayList<>(); 

    for (ClientUserLocale locale : ClientUserLocale.values()) { 
     for (PersonaValidationUpdate validation : PersonaValidationUpdate.values()) 
      data.add(new Object[]{locale.getLocale(), validation}); 
    } 

    return data; 
} 
関連する問題