bu almak benim test sınıf teknik SRP ihlal ettiğini, ancak SRP ruhunu ihlal etmez. Kendiliğinden değişme alternatifi, test sınıfından ayrı bir alay sınıfına sahip olmaktır. Eğer hepsi müstakil var ve SRP tatmin düşünebilir ayrı sahte sınıf, sahte sınıfının özelliklerine ancak semantik bağlantı ile
hala orada. Yani, gerçekten anlamlı bir ayrılık elde etmedik.
PDF dışına örneğini alarak:
public class ScannerTest extends TestCase implements Display
{
public ScannerTest (String name) {
super (name);
}
public void testScan() {
// pass self as a display
Scanner scanner = new Scanner (this);
// scan calls displayItem on its display
scanner.scan();
assertEquals (new Item (“Cornflakes”), lastItem);
}
// impl. of Display.displayItem()
void displayItem (Item item) {
lastItem = item;
}
private Item lastItem;
}
Şimdi yapmak bir Mock: pratik açıdan (IMHO)
DisplayMock
için
TestClass
yüksek kavrama olarak
public class DisplayMock implements Display
{
// impl. of Display.displayItem()
void displayItem (Item item) {
lastItem = item;
}
public Item getItem() {
return lastItem;
}
private Item lastItem;
}
public class ScannerTest extends TestCase
{
public ScannerTest (String name) {
super (name);
}
public void testScan() {
// pass self as a display
DisplayMock dispMock = new DisplayMock();
Scanner scanner = new Scanner (dispMock);
// scan calls displayItem on its display
scanner.scan();
assertEquals (new Item (“Cornflakes”), dispMock.GetItem());
}
}
daha büyük kötülüktür TestClass
için SRP ihlali. Ayrıca, alay çerçevelerinin kullanılmasıyla, bu sorun tamamen ortadan kalkıyor.
DÜZENLEME Sadece Robert C. Martin'in mükemmel kitabında Agile Principles, Patterns, and Practices in C# kendinden şant desen kısaca bahsetmek karşılaştım.
Yani, (aynı kitapta ayrıntılı olarak anlattı edilir) SRP icat adam kendinden şant desen kullanarak gizlemiyor: İşte kitabın dışına snippet'idir. Bunun ışığında, bu modeli kullanırken OOP'tan (Nesne Yönlendirilmiş Polis) oldukça güvenli olduğunuzu söyleyebilirim. Bence
Bu kesinlikle iyi bir nokta, ama yanlış bir argüman. Testin her halükarda değişmesi muhtemel olduğu için, bu modelin kullanılması test sınıfının SRP'yi ihlal etmesine sebep olmaz. Pratik bir bakış açısıyla söylenen şey, örüntüyü kullanmaya ve belki de SRP'yi ihlal etmeye karşı değilim. –