a3dsfcv:
Es sei angenommen, ich habe Klasse Formater
class Formatter {
public FormattedData format(Map<String, Data> data) {
return .....
}
}
und eine andere Klasse , Collector
dass Anwendungen Formatter
und zurückgeben können Daten formatiert
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)
}
Also das Problem - ich möchte Schreibtests. Ich schrieb alle Tests für Formatter
Klasse, aber wie soll ich testen Collector
?
Da ich nicht über die Umsetzung der Sammler verlassen sollte - ich brauche alle Tests für kopieren Formatter
und sie als Eingabe übergeben Collector
. Sicher in Tests würde ich ändern , Map<String, Data> data
um Data data
als Eingabedatentyp, aber trotzdem wird es eine große Code - Duplizierung sein. Wie kann ich es vermeiden?
Gericht:
Sie verwenden Mocks so dass Sie nicht auf der Formatierungs Implementierung abhängen.
@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);
}
}