Saya baru saja membaca kutipan dari buku "Growing Object-Oriented Software" yang menjelaskan beberapa alasan mengapa mengejek kelas beton tidak dianjurkan.
Di sini beberapa contoh kode unit-test untuk kelas 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());
}
}
Dan penjelasan pertamanya:
Masalah dengan pendekatan ini adalah bahwa ia meninggalkan hubungan antara objek yang tersirat. Saya harap kami telah menjelaskan sekarang bahwa tujuan Pengembangan Didorong-Tes dengan Mock Objects adalah untuk menemukan hubungan antara objek. Jika saya subkelas, tidak ada dalam kode domain untuk membuat hubungan seperti itu terlihat, hanya metode pada objek. Ini membuatnya lebih sulit untuk melihat apakah layanan yang mendukung hubungan ini mungkin relevan di tempat lain dan saya harus melakukan analisis lagi lain kali saya bekerja dengan kelas.
Saya tidak tahu apa yang dia maksud ketika dia mengatakan:
Ini membuatnya lebih sulit untuk melihat apakah layanan yang mendukung hubungan ini mungkin relevan di tempat lain dan saya harus melakukan analisis lagi lain kali saya bekerja dengan kelas.
Saya mengerti bahwa layanan ini sesuai dengan MusicCentre
metode yang disebut startMediaAt
.
Apa yang dia maksud dengan "di tempat lain"?
Kutipan lengkap ada di sini: http://www.mockobjects.com/2007/04/test-smell-mocking-concrete-classes.html