Ünite Test Nitelikleri genellikle genel Yöntemler gerektirir?


12

Son zamanlarda, bir .NET derlemesinde korumalı bir yönteme [TestInitialize] eklemenin saygı görmediğini, ancak yöntemi herkese açık hale getirdiğimde, birim test çalıştırıcısı (bu durumda Resharper) tarafından çağrıldığını belirttim. Bunu geçmişte birkaç kez test yöntemleriyle fark ettim.

Teknik olarak konuşursak, kamusal bir yöntem olarak özel bir yönteme yansıtmak kadar kolaydır. Nitekim, yansıtma, özel yöntemleri birim test etmek için kullanılan bir yöntemdir.

Öyleyse neden tüm birim test yöntemlerimi herkese açık hale getirmem gerekiyor?


2
Bu gerçekten iyi bir soru. Duyduğum tek iyi argüman, SOLID ilkelerinin bir parçası olan "bir uygulamaya değil, bir arabirime program" ilkesini izlemesi.
Robert Harvey

9
Sınıflarını test etmekten bahsettiğini sanmıyorum, test çerçevesi tarafından çağrılan gerçek test yöntemlerinden bahsediyor.
jtiger

1
Java'da @RobertHarvey, benzer kısıtlamanın nedeni (örneğin, JUnit'te), çerçeve tasarımcılarının setAccessiblebazı özel SecurityManager tarafından engellenebilecekleri
gnat

1
bu tasarım kararının geniş kullanım amacına yönelik genel amaçlı bir çerçeve için verildiğini dikkate almanız gerekir. Böyle durumlarda, tasarımcının en kötüye gitmesi ve hazırlaması daha güvenlidir. Bilmiyorsam, şirket içi bir çerçeve (istenen güvenlik politikalarını garanti etme şansı olabilir) veya dar, özel amaçlı bir araçsa ("erişilemeyen üyeler için izleyici" düşünün), tasarımcı düşünmek için başka seçenekler olurdu
gnat

2
@GregBurghardt Bu davranış Nunit'te ve muhtemelen Microsoft'un yazmadığı diğer test çerçevelerinde bulunur. Tabii bu soruyu sorduktan sonraki yıllarda .NET hakkında çok daha fazla şey anlıyorum, ama yine de bunun adil bir soru olduğunu düşünüyorum ve yorumlarda iyi bir tartışma var.
Justin Dearing

Yanıtlar:


2

Sen sınıf Ne test etmelidir yapar değil, nasıl bunu yapar.

"Dış Dünya" söz konusu olduğunda, sınıfın herkese açık olarak erişebildiği şey budur; Test çerçeveniz de aynı varsayımı yapıyor.

Herkese Açık'tan daha az bir şey test ederek, sınıfın dahili uygulamasına girersiniz, bu da Kötü bir Fikirdir.


Sorunun test edilen sistemdeki yöntemlerle değil, test yöntemleriyle ilgili olduğunu unutmayın. Her ne kadar OP, kamuoyundan "daha az" şeyleri test etmek için yansımayı kullanabileceğinizi iddia etse de, test çerçevelerinin özel yöntemlere erişme yeteneği hakkında bir argüman. Test çerçevesi, (bir öznitelik ile işaretlenmiş) test yöntemlerini bulmak için yansımayı kullanmalı ve bu nedenle bunu akılda tutarak yansımayı kullanmalıdır ... "Neden tüm birim test yöntemlerimi herkese açık hale getirmem gerekiyor?"
Theraot

Test yöntemleri özel yöntemlere erişebilme özelliğine sahiptir; Yansıma ile her şey mümkündür. Bu soruyu, bunu yapma arzusu hakkında daha çok görüyorum.
Phill W.

0

Genel bir kural olarak, yalnızca genel yöntemlere erişmek en iyisidir - bir sınıf oluşturduğunuzda, diğer sınıfların kodunuza erişmesi gereken sözleşmeyi de oluşturursunuz. Bu yüzden cevap büyük olasılıkla sadece bir kongre olması.


1
Bu soruya gerçekten cevap vermiyor.
RubberDuck
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.