Diğer cevaplar aksine, test bazı yolları o notta önemlidir edebilirsiniz testi (SUT) kapsamında sistem refactored zaman, kırılgan hale eğer deney whitebox olduğunu.
Alaycılara çağrılan yöntemlerin sırasını doğrulayan alaycı bir çerçeve kullanıyorum (çağrılar yan etki olmadığından sipariş sırasız olduğunda); o zaman kodum bu yöntemle daha temizse farklı bir sıraya göre çağırır ve yeniden yönlendiririm, o zaman testim sona erer. Genel olarak, alaylar testlere kırılganlık getirebilir.
SUT'umun iç durumunu özel veya korumalı üyelerini açığa çıkararak kontrol ediyorsam ("temel" işlevini görsel temelde kullanabiliriz veya "iç" erişim düzeyini yükseltebilir ve c # 'da "internalsvisibleto" kullanabiliriz; c # a " teste özgü bir alt sınıf " kullanılabilir) daha sonra aniden sınıfın iç durumu önemli olacaktır - sınıfı kara kutu olarak yeniden değerlendiriyor olabilirsiniz, ancak beyaz kutu testleri başarısız olacak. Tek bir alanın, SUT durumu değiştiğinde farklı şeyler ifade etmek için tekrar kullanıldığını varsayalım (iyi uygulama değil!) - kırılmış testleri yeniden yazmamız gerekebilir.
Teste özgü alt sınıflar, korunan yöntemleri test etmek için de kullanılabilir - bu, üretim kodu bakış açısına göre bir refraktörün test kodu bakış açısından bir değişiklik olduğu anlamına gelebilir. Birkaç çizgiyi korumalı bir yöntemin içine veya dışına taşımak, üretim yan etkileri göstermeyebilir, ancak bir testi bozabilir.
" Test kancaları " veya başka bir teste özgü veya koşullu derleme kodu kullanırsam, iç mantığa kırılgan bağımlılıklar nedeniyle testlerin bozulmamasını sağlamak zor olabilir.
Bu nedenle, testlerin SUT'un iç detaylarına birleştirilmesini önlemek için aşağıdakilere yardımcı olabilir:
Yukarıdaki hususların tümü testlerde kullanılan beyaz kutu kuplajına örnektir. Bu nedenle, kırılma testlerini yeniden düzenlemekten tamamen kaçınmak için SUT'un kara kutu testini kullanın.
Feragatname: Burada yeniden yapılanmayı tartışmak amacıyla, iç uygulamalarda görünür dış etki olmadan değişiklik yapılmasını dahil etmek için bu sözcüğü biraz daha geniş bir şekilde kullanıyorum. Bazı safhalar, yalnızca, Martin Fowler ve Kent Beck'in Atomik Yeniden İşleme operasyonlarını tanımlayan Refactoring adlı kitabına atıfta bulunabilir ve bunlara atıfta bulunabilir.
Uygulamada, burada açıklanan atomik işlemlerden biraz daha büyük olmayan adımlar atma eğilimindeyiz ve özellikle üretim kodunu dışarıdan aynı şekilde bırakan değişiklikler testlerden geçmeyebilir. Ancak bir refaktör olarak "başka davranış algoritmasıyla aynı algoritmaya sahip başka bir algoritma yerine algoritmayı dahil etmenin" adil olduğunu düşünüyorum. Martin Fowler’in kendisi, yeniden yapılanmanın testleri kırabileceğini söylüyor:
Bir alaycı testi yazdığınızda, tedarikçileri ile doğru şekilde konuşmasını sağlamak için SUT'un giden çağrılarını test ediyorsunuz. Klasik bir test yalnızca son durumu önemser - bu durumun nasıl türetildiği değil. Mockist testler bu nedenle bir yöntemin uygulanmasına daha fazla bağlanmıştır. Çağrılarınızı ortak çalışanlara göre değiştirmek genellikle alaycı testlerin kırılmasına neden olur.
[...]
Uygulamaya bağlanma, yeniden yapılanmaya da müdahale eder, çünkü uygulama değişikliklerinin testleri klasik testlerden daha fazla kırması daha muhtemeldir.
Fowler - Mocks taslak değil