Właśnie przeczytałem fragment książki „Growing Object-Oriented Software”, która wyjaśnia kilka powodów, dla których kpiny z konkretnej klasy nie są zalecane.
Oto przykładowy kod testu jednostkowego dla klasy MusicCentre:
public class MusicCentreTest {
@Test public void startsCdPlayerAtTimeRequested() {
final MutableTime scheduledTime = new MutableTime();
CdPlayer player = new CdPlayer() {
@Override
public void scheduleToStartAt(Time startTime) {
scheduledTime.set(startTime);
}
}
MusicCentre centre = new MusicCentre(player);
centre.startMediaAt(LATER);
assertEquals(LATER, scheduledTime.get());
}
}
I jego pierwsze wyjaśnienie:
Problem z tym podejściem polega na tym, że pozostawia domniemany związek między przedmiotami. Mam nadzieję, że do tej pory wyjaśniliśmy, że zamiarem rozwoju opartego na testach z Mock Objects jest odkrywanie relacji między obiektami. Jeśli podklasę, w kodzie domeny nie ma nic, co by uwidoczniło taką relację, tylko metody na obiekcie. Utrudnia to sprawdzenie, czy usługa obsługująca tę relację może być istotna w innym miejscu, i będę musiał ponownie przeprowadzić analizę następnym razem, gdy będę pracować z klasą.
Nie mogę dokładnie zrozumieć, co on ma na myśli, mówiąc:
Utrudnia to sprawdzenie, czy usługa obsługująca tę relację może być istotna w innym miejscu, i będę musiał ponownie przeprowadzić analizę następnym razem, gdy będę pracować z klasą.
Rozumiem, że usługa odpowiada MusicCentre
wywołanej metodzie startMediaAt
.
Co rozumie przez „gdzie indziej”?
Pełny fragment znajduje się tutaj: http://www.mockobjects.com/2007/04/test-smell-mocking-concrete-classes.html