2017-02-14 33 views
26

Şu anda en son Visual Studio 2017 Sürüm Adayı ile bir .Net Standard 1.6 kitaplığı oluşturarak çalışıyorum. Kodumu sınamak için xUnit kullanıyorum ve hala VS2017'de iç yöntemleri test edip edemeyeceğinizi merak ediyorum.VS2017 .Net Standart kitaplığında iç yöntemleri test eden birim

yaşımdan VS2017 Net Standart projelerinde hiçbir AssemblyInfo.cs sınıf bulunmadığından Eğer belirtilen projeler sağlayacak VS2015 tüm çizgi AssemblyInfo.cs sınıf içi yöntemler

[assembly:InternalsVisibleTo("MyTests")] 

görmek olabileceğini unutmayın hala birim testi iç yöntemleri olabilir eğer merak? .NET docs for the InternalsVisibleToAttribute göre

+3

Siz * kodunuzu yalnızca harici olarak görülebilen işlevlerden sınamak için * kullanabilmeniz gerekir. Sonuçta, harici koddan hiçbir mantıksal yol bu içsel yöntemlere ulaşamazsa, o zaman ilk etapta ne yapıyorlardı? – David

+1

@David Bunu yapabilirim ve yapmıştım ama daha önce bazı iç sınıflar etrafında basit birim testleri koymuştum. Sadece testte daha açık olmak için. –

+1

AFAIK, bu özelliği "namespace" bloğu dışındaki başka herhangi bir dosyaya yerleştirebilir ve derlemelidir. AssemblyInfo.cs hakkında büyülü bir şey olmamalı. Çalışmıyor mu? Elbette doğru 'using' deyimini eklemeniz ya da tam olarak belirtilen özelliği kullanmanız gerekir: [assembly: System.Runtime.CompilerServices.InternalsVisibleTo (" Something ")]'. – Groo

cevap

45

:

özelliği montaj seviyesinde uygulanır. Bu, bir kaynak kod dosyasının başlangıcında yer alabileceği anlamına gelir veya bir Visual Studio projesinde AssemblyInfo dosyasına eklenebilir. Başka bir deyişle

, sadece kendi keyfi adlandırılmış .cs dosyasında yerleştirebilirsiniz ve sorun çıkmaması gerekir:

// some .cs file included in your project 
using System.Runtime.CompilerServices; 
[assembly:InternalsVisibleTo("MyTests")] 
+1

Evet, işe yarıyor. Asla o bir :-) –

+1

@PhilMurray olarak kabul etti: Ayrıca, burada açıklandığı gibi bir "klasik" 'AssemblyInfo.cs' dosyası oluşturmanıza izin veren bir ayar var gibi görünüyor (burada) (http://stackoverflow.com/a)/42183749/69809). Aksi takdirde, "description", "copyright" ve diğer şeyler gibi tüm özellikler .csproj dosyasında saklanır. – Groo

2

"InternalsVisibleTo" niteliği beyaz" her türlü anahtarıdır -box "(on yıl boyunca, sanırım) test. Net. Ön taraftaki "assembly" özelliğine sahip herhangi bir C# dosyasına yerleştirilebilir. MS DOC'lerinin, derleme adı, imzalanmışsa, ortak anahtar belirteci tarafından nitelendirilmesi gerektiğini söyler. Bazen bu işe yaramıyor ve kişinin tam açık anahtarı onun yerine kullanması gerekiyor. Dahili sistemlere erişim, eşzamanlı sistemleri ve diğer birçok durumda test etmenin anahtarıdır. Bakınız https://www.amazon.com/xUnit-Test-Patterns-Refactoring-Code/dp/0131495054. Bu kitapta Meszaros, temel olarak program geliştirmeye yönelik bir “Test İçin Tasarım” yaklaşımı oluşturan çeşitli kodlama stillerini anlatmaktadır. En azından yıllardır kullandım.