a3dsfcv:
Suponemos que tengo clase Formater
class Formatter {
public FormattedData format(Map<String, Data> data) {
return .....
}
}
y otra clase Collector
que los usos Formatter
y pueden devolver datos formateados
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)
}
Así que el problema - Quiero pruebas de escritura. Me escribió todas las pruebas para Formatter
la clase, pero ¿cómo debe probar que Collector
?
Dado que no debería depender de ejecución de colector - Necesito copiar todas las pruebas para Formatter
y pasarlos como entrada para Collector
. Sin duda, en las pruebas que cambiaría Map<String, Data> data
al Data data
tipo de datos de entrada, pero de todos modos no habrá una enorme duplicación de código. ¿Cómo puedo evitarlo?
plato:
Se utiliza burla por lo que no dependen de la implementación del formateador.
@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);
}
}