Je suppose que la classe Formater
class Formatter {
public FormattedData format(Map<String, Data> data) {
return .....
}
}
et une autre classe Collector
que les utilisations Formatter
et peuvent renvoyer des données formatées
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)
}
Le problème - je veux des tests d'écriture. J'ai écrit tous les tests de Formatter
classe, mais comment dois - je tester Collector
?
Étant donné que je ne devrais pas compter sur la mise en œuvre du collecteur - je besoin de copier tous les tests pour Formatter
et les transmettre comme entrée pour Collector
. Certes , dans les tests que je changerais Map<String, Data> data
pour Data data
que le type de données d'entrée, mais de toute façon il y aura une énorme duplication de code. Comment puis - je éviter?
Vous utilisez simulacres de sorte que vous ne dépendez pas sur la mise en œuvre de formatter.
@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);
}
}