yapıyor ben birim test yeniyim ve ben 'iç' erişim değiştiricisinin fazlasını kullanarak başlamalı olmadığını anlamaya çalışıyorum. Bence 'iç' kullanmak ve montaj değişkeni 'InternalsVisibleTo' ayarlarsanız, biz test projesinden halkı beyan etmek istemiyorum fonksiyonlarını test biliyorum. Bu bana her zaman 'dahili' kullanmam gerektiğini düşünmemi sağlıyor, çünkü en azından her projenin (test yapmalı) kendi test projesi var. Bunu yapmamam için bana bir neden söyleyebilir misiniz? Ne zaman 'özel' kullanmalıyım?C# "iç" erişim değiştirici birim test
cevap
İç sınıflar test edilmeye ihtiyacı ve bir Assemby niteliği vardır:
using System.Runtime.CompilerServices;
[assembly:InternalsVisibleTo("MyTests")]
proje bilgisi dosyası, mesela bu ekle Properties\AssemblyInfo.cs
.
Bunu test projesine veya test edilen projeye ekledim!?!? – akuhn
Bunu test edilen projeye ekleyin (ör., Properties \ AssemblyInfo.cs). "Testlerim" test meclisi olurdu. – EricSchaefer
Bu gerçekten kabul edilen cevap olmalı. Seni bilmiyorum çocuklar, ama testler koddan "çok uzak" olduklarında test ettikleri için sinirleniyorum. Ben 'özel' olarak işaretlenmiş herhangi bir şeyi test etmekten kaçınıyorum, ama çok fazla 'özel' şey çok iyi çıkarılmaya çalışılan bir 'iç' sınıfa işaret edebilir. TDD veya yok TDD, çok fazla kodu test eden daha fazla test yapmayı tercih ediyorum, aynı miktarda kodu kullanan çok az test var. Ve 'dahili' şeyleri test etmekten kaçınmak, iyi bir oran elde etmek için tam olarak yardımcı olmaz. –
Sen özel yanı kullanabilir ve yansıma ile özel yöntemleri çağırabilir. Visual Studio Team Suite'i kullanıyorsanız, sizin için özel yöntemlerinizi çağırmak için bir proxy oluşturacak bazı güzel işlevlere sahiptir. Özel ile
kullanmanız gereken değiştirici hangi erişim açısındanhttp://www.codeproject.com/KB/cs/testnonpublicmembers.aspx
, başparmak benim genel kural başlatmak: Burada birim test özel ve korunan yöntemlere işi kendiniz yapabilirsiniz gösteren bir kod projesi makale ve gerektiğinde yükseltin. Bu şekilde, sınıfınızın iç detaylarının çok azını gerçekten ihtiyaç duyduğunuz şekilde ortaya çıkaracak ve uygulama ayrıntılarını gerektiği gibi gizlemeye yardımcı olacaksınız.
Özel yöntemleri sınamak isterseniz, PrivateObject
ve PrivateType
adresindeki Microsoft.VisualStudio.TestTools.UnitTesting
ad boşluğuna bakın. Gerekli yansıma kodları etrafındaki sargılar için kolay kullanım sunarlar.
Dokümanlar: PrivateType varsayılan olarak gizli kullanılarak PrivateObject
Oy kullanımda iken lütfen yorum bırakın. Teşekkürler. –
Bu cevaptan aşağı aptal oylama. Daha önce belirtilmeyen yeni bir çözüm ve gerçekten iyi bir noktaya işaret ediyor. –
Tut. Eğer bir üye bu türün ötesine maruz kalmamalıysa, aynı projenin içinde bile olsa bu türün ötesine maruz bırakılmamalıdır. Bu, işleri daha güvenli ve daha düzenli tutar - nesneyi kullanırken, kullanmanız için hangi yöntemleri kullanacağınız daha açık olur.
, ben bazen deneme amaçlı doğal özel yöntemler iç sunmak için makul olduğunu düşünüyorum olduğunu söyledi. Bunu refactoring-unfriendly olan yansımayı kullanmayı tercih ederim. Bir "ForTest" eki olabileceğini dikkate almakBir şey: Aynı proje içinde sınıf kullanıyorsunuz Sonra
internal void DoThisForTest(string name)
{
DoThis(name);
}
private void DoThis(string name)
{
// Real implementation
}
, bu (şimdi ve gelecekte) aşikar olduğunu yapmamalısın Gerçekten bu yöntemi kullanıyor - sadece test amaçlı var. Bu biraz hacky, ve kendim yaptığım bir şey değil, ama en azından dikkate değer.
Eğer yöntem dahili ise, bu, test tertibatından kullanımını engellemez mi? –
@Ralph: InternalsVisibleTo kullanılmıyor. –
Bazen 'ForTest' yaklaşım kullanmak ama hep ölü çirkin (üretim iş mantığı açısından hiçbir gerçek değer sağlar ekleyerek kodu) bulabilirsiniz. Genellikle yaklaşımı kullanmak zorunda kaldım çünkü tasarım biraz talihsiz bir durumdur (örn.testler arasında tekil örneklerini sıfırlamak zorunda kalıyor) – ChrisWue
- 1. C# Birim Test çerçevesi?
- 2. Birim Testlerindeki Erişim Kaynakları
- 3. VS2017 .Net Standart kitaplığında iç yöntemleri test eden birim
- 4. Birim Test bağımlılığı enjeksiyonu
- 5. Birim test boşluk yöntemi
- 6. Birim test dosya yükleme
- 7. Birim Test çalıştırılamıyor
- 8. Bir Test :: Birim :: TestCase
- 9. Springboot Birim Test Autowired
- 10. Birim Test Grafikleri
- 11. angular2 birim test
- 12. Birim Test Marklogic
- 13. Birim Test Açıklaması Soru
- 14. Birim Test $ routeParams direktifi
- 15. birim test ASP.NET Çekirdek kontrolör
- 16. Otomatik C birim testi
- 17. Birim Test ASP.NET MVC5 App
- 18. Özel değiştirici
- 19. Birim Test hedef XCode 4.5
- 20. Vala için birim test çerçevesi
- 21. Birim Test AS3 Kod Flaş
- 22. Birim test ve Google AppEngine
- 23. Unicode Clojure birim test çıkışı
- 24. Model Mixin'i test eden birim
- 25. Birim Test - veritabanı ve fikstürler
- 26. Birim Test ASP.NET MVC Verilerle
- 27. MVC3 birim test yanıtı kodu
- 28. nasıl Birim test AFNetworking isteği
- 29. ZF2 birim test kimlik doğrulama
- 30. Birim Sınaması C# [TestInitialize]
değer söz - Sık sık() 'yöntemlerle kendilerinde' System.Diagnostics.Debug.Assert kullanarak iç test yöntemleri biriminin ihtiyacını önleyebilirsiniz. –