組成物での授業のためのテストを書くためのベストプラクティスは何ですか

a3dsfcv:

私はクラスを持っていると仮定 Formater

class Formatter {
  public FormattedData format(Map<String, Data> data) {
    return .....
  }  
}

そして、別のクラスCollectorの用途があることFormatterと、返すことができ、データをフォーマットし

class Collector {
  Formatter formatter;
  Map<Id, Data> map = new HashMap<>()

  class Collector (Formatter formatter) {
    this.formatter = formatter;  
  }

  public void addData(Data data) (
    map.put(data.getId(), data);
  }

  public FormattedData getFormattedData() {
    return formatter.format(map)
  }

問題は、そう-私はテストを書きたいです。私はのためにすべてのテストを書いたFormatterクラスを、どのように私はテストする必要がありますかCollector

私はコレクターの実装に依存すべきではありませんので-私はのためにすべてのテストをコピーする必要がありFormatterとのための入力として渡しますCollector確かにテストで私は変化するであろうMap<String, Data> dataData data、入力データ型として、とにかく巨大なコードの重複があるでしょう。どのように私はそれを避けることができますか?

料理:

あなたはフォーマッタの実装に依存しないようにするには、モックを使用しています。

@Test
@ExtendWith(MockitoExtension.class) // @RunWith(MockitoJUnitRunner.class) for JUnit 4
class CollectorTest {
    @InjectMocks
    private Collector sut;

    @Mock
    private Formatter formatter;

    public FormattedData getFormattedData() {
        FormattedData formatted = mock(FormattedData.class);
        when(formatter.format(any()).thenReturn(formatted);

        FormattedData result = sut.getFormattedData();

        // verify injected formatter was called
        verify(formatter).format(any());
        // verify the result of the formatter is returned by the collector
        assertThat(result).isSameAs(formatted);
    }
}

おすすめ

転載: http://10.200.1.11:23101/article/api/json?id=478651&siteId=1