Birim Testleri ile çalışmak için "Çıktı Dizinine Kopyala" yı nasıl alabilirim?


123

Testler yürütülmeden önce bir birim test projesi oluşturduğumda, test çıktısı bir TestResults klasörüne kopyalanır ve ardından testler yürütülür. Yaşadığım sorun, Debug / bin dizinindeki tüm dosyaların TestResults projesine kopyalanmamasıdır.

Debug / bin dizinine kopyalanan bir dosyanın TestResults klasörüne de kopyalanmasını nasıl sağlayabilirim?

Yanıtlar:


121

Bunu yapmanın standart yolu , dosyada, Visual Studio Test menüsündeki veya Çözüm Öğeleri klasöründeki Test Çalıştırması Yapılandırmalarını Düzenle öğesi aracılığıyla erişilebilen dağıtım öğelerini belirlemektir ..testrunconfig


15
VS2010'da bu: Test Ayarlarını / yerel'i Test Et / Düzenle, ardından listeden "Dağıtım" seçeneğini seçin, "Etkinleştir ..." kutusunu işaretleyin ve dosyaları ekleyin.
Marcel

18
Çözümünüzü (hatta Visual Studio'yu) kapatmanız ve bu değişiklik düzgün bir şekilde yürürlüğe girmeden önce yeniden
açmanız gerekebilir

RobV, günümü kutladın. TEŞEKKÜRLER!
Ignacio Soler Garcia

2
Kodda [DeploymentItem] özniteliğini kullanırsanız, iletişim kutusundaki dosyaları belirtmeniz gerekmez - aşağıdaki @ tomfanning'in koduna bakın.
Patrick Szalapski

Bu, yapılandırma çıktısını bin veya sürüm klasöründen kopyalamakla ilgili sorunumu çözmez çünkü tasarım sırasında dosyanın hata ayıklama veya yayınlama klasöründe olup olmayacağı ve benim için kopyalanmayan dosya hakkında bilgi sahibi değilim Test sonuçlarında Çıkış klasörü
Gurpreet

61

Dağıtım özniteliğini aşağıda gösterilen bir örnek gibi belirtebilirsiniz; Ayrıca "İçerik" ve "Daha yeniyse kopyala" özelliğini ayarlamanız gerekir (sonraki ayarlarda belge yoktur, ancak bunları çalışmasını sağlamak için ayarladınız.

[TestMethod]
[DeploymentItem("mytestdata.xml")]
public void UploadTest()
{



}

3
Hala bunu etkinleştirmeniz gerekiyor. Mercel'in yorumunda yazdığı gibi, VS2010'da bu: Test Ayarlarını / yerel'i Test Et / Düzenle, ardından listede "Dağıtım" ı seçin, "Etkinleştir ..." kutusunu işaretleyin.
Patrick Szalapski

Visual Studio 2012 Express'te bu sorunla uğraşıyorum ve sınırlı bir sürüm olduğu için net belgeler bulmak zordu. Bu cevap için çok teşekkür ederim.
DavidHyogo

2
Harika çalışıyor. Test yönteminin hemen üzerinde gerekli dosyaları belgelediği için bunun daha iyi bir yöntem ve yanıt olduğunu düşünüyorum.
bu5hm4nn

1
DeploymentItem özniteliğinin test sınıfı düzeyinde (yöntem düzeyi yerine) belirtildiğinde de çalıştığını buldum .
Jon Schneider

10

Özniteliğin çalışması Test -> Edit Test Settings -> Local -> Deploymentiçin altında "Dağıtımı Etkinleştir" i [DeploymentItem]açmam gerekiyordu.


Bu doğru ... Sadece etkinleştirdim ve şimdi öznitelik çalışıyor. Teşekkürler!
Miguel Angelo

Başka bir cevaba yaptığım yorumda da belirttiğim gibi, visual studio 2012 express'te aynı problemle mücadele ediyorum ve 2 cevap birlikte sonunda bana çözümü verdi.
DavidHyogo

5

İhtiyaçlarınıza bağlı olarak her üç yanıt da doğrudur.

Dosya ekleme içinde dağıtmak için .testrunconfig (VS2010 içinde .testsettings) ilgisiz testler izolasyon çalıştırmak için bile, her bir test çıktısı klasörüne bu dosyaların tüm kopyalar. Bir test çalıştırırsanız, .testssettings öğesinin dağıtım bölümünde listelenen tüm test veri dosyaları test çıktı klasörüne kopyalanacaktır.

Testlerimde, gerçek test çıktı XML'iyle karşılaştırmak için beklenen bir XML dosyasını test çıktı klasörüne kopyalamam gerekiyor. DeploymentItem özniteliğini yalnızca çalıştırılan test (ler) le ilgili XML dosyasını kopyalamak için kullanıyorum. VS2010'da .testsettings dosyasında dağıtımı etkinleştirmem (ancak herhangi bir yol eklememem) ve ardından DeploymentItem'deki TestProject'e göre XML dosya yoluna başvurmam gerekiyordu.

Bu yardımcı olur umarım.


2
Benim sorunum burada bahsedilen Göreli Yol'du, Xml'nin testin bulunduğu dizinde olması gerektiğini düşündüm, ancak proje kökünde olması veya içinde bulunduğu dizinin önüne gelmesi gerekiyordu.
Wes Grant

2

Benzer bir sorun yaşadım ama benimki Local.testsettings dosyası yerine TraceAndTestImpact.testsettings dosyasına işaret etmek zorunda kaldı. Test / Aktif Test Ayarlarını Seç menüsü altında birinden diğerine geçiş yapabilirsiniz.


2

CopyLocal'ın çalışmadığı durumlarda, veri veya yapılandırma vb. İçin normal kullanım yönteminden ziyade, onu özellikle dll'ler için dağıtmanın bir yolunu belirterek, kabul edilen yanıtı geliştirmek ister misiniz:

[DeploymentItem("bin\\release\\iRock.dll")]
[DeploymentItem("bin\\debug\\iRock.dll")]

1

Aşağıdakiler, bir test ayarları dosyası kullanmadan birden çok çözüme dahil edilen test projeleri için VS2012'de çalışır:

1) Dağıtmak istediğiniz dosyaları ve klasörleri test projesi dizinindeki bir klasöre yerleştirin.

2) Proje özelliklerinde, bir inşa sonrası adımı oluşturun

xcopy /Y /S /i "$(ProjectDir)<Project_Folder_Name>\*" "$(TargetDir)<Deployment_Folder_Name>"

$(ProjectDir)ve $(TargetDir)VS tarafından yorumlanacak makrolardır ve bu şekilde dahil edilmelidir.

<Project_Folder_Name> 1. adımda oluşturulan klasörün adıdır.

<Deployment_Folder_Name> test dosyalarının dağıtılacağı klasörün adıdır ve aynı dizine birden çok test projesi dağıtıldığında benzersiz olacak şekilde adlandırılmalıdır, örn. <Project_Name>_TestInputs .

Paylaşılan konumlardaki test dosyaları, test etkileşimlerini sınırlandırmak için hedef dizin dağıtım klasörüne de kopyalanmalıdır. $(ProjectDir)Makroya göre kaynak yolunu sağlayın . Örneğin"$(ProjectDir)..\..\Common Files\C1219TDL-2008.xml" .

3) Bir ekle [DeploymentItem(source, destination)] Bir dağıtım dosyası (en iyi uygulama) kullanan her test yöntemine veya test sınıfına (tembel veya aceleci olanlar için daha kolay uygulama ve bir projeyi daha önce kullanılan göreceli yolları veya bir test ayarları dosyasını güncellemenin en kolay yolu) bir özellik ekleyin ).

Bir test yöntemi, sourceyarattığı hedef dizine test yöntemi rölatif olarak kullanılan dosya veya dizinin yoludur xcopyve destinationbu dağıtım dizinine göre oluşturulacak dizine yoludur. Böylece testler, hedef dizinde veya bir dağıtım dizininde tutarlı çalışır. Hedef yol, dosya referansı olmayan kaynak yolla aynı olmalıdır. Örnek: [DeploymentItem("Example_TestInputs\C1219TDL-2008.xml","Example_TestInputs")]. Bu DeploymentItemdosya veya dizini kullanan her yönteme dahil edilmelidir.

Bir sınıfta sourceve destinationher ikisi de hedef dizinde oluşturulan klasörün adıdır.xcopy ; bu, sınıftaki herhangi bir test çalıştırıldığında tüm klasörü dağıtım dizinine kopyalar. Misal:[DeploymentItem("Example_TestInputs","Example_TestInputs")]

4) Test yöntemlerinde, artık dosyalara ve dizinlere, Visual Studio'nun o gün koymaya karar verdiği yere bakılmaksızın çalışma dizininde olacaklarına güvenle erişebilirsiniz, örn File.Exists(".\Example_TestInputs\C1219TDL-2008.xml").


0

Visual Studio'nun içinden Post-Build olay komut satırını deneyin (bu IDE'yi kullanıyorsanız).


3
Öyleyim ama bu biraz hileye benziyor. Bu oldukça yaygın bir senaryo olmalı ve umarım doğru şekilde ayarlayamadığım bir seçenek veya özellik vardır.
Eric Schoonover

0

Visual Studio 2012'de, basit durum için DeploymentItem özniteliğine ihtiyacınız yoktur. Cevabımı burada görün


0
[TestMethod]
[DeploymentItem("ProjectName/Folder/SubFolder/file.xml", "Folder/Subfolder")]
public void YourTestMethod()
{
   // in the method you are testing you should have this:
   var filePath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().CodeBase) + "/Folder/Subfolder/file.xml";
}

0

Kabul edilen cevap doğrudur ve diğer cevapların çoğu da öyle. Ancak, yıllar içinde DeploymentAttribtue ve Copy to Output kullanarak Visual Studio Unit Testlerinin Deploment sisteminin olduğunu buldum çok sayıda veri dosyanız varsa, külfetli olduğunu . Dosyaları orijinal konumlarında tutmanın daha iyi sonuç verdiğini buldum.

Diğer cevabımdaki tüm detaylar burada. https://stackoverflow.com/a/53004985/2989655

Bu yardımcı olur umarım.

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.