MST dosyasını test çalıştırma klasörüne kopyala


108

Bir XML dosyasının okunmasını ve ardından ayrıştırılmasını gerektiren bir testim var. Bu dosyayı her seferinde test çalıştırma klasörüne nasıl kopyalayabilirim?

XML dosyası "Daha yeniyse kopyala" ve "yok" derleme modu olarak ayarlanmıştır (çünkü gerçekten derlenebilir bir şey değildir)

Yanıtlar:


131

bir DeploymentItemöznitelik kullan

using System;
using System.IO;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using CarMaker;

namespace DeploymentTest
{
    [TestClass]
    public class UnitTest1
    {
        [TestMethod()]
        [DeploymentItem("testFile1.xml")]
        public void ConstructorTest()
        {
            string file = "testFile1.xml";
            Assert.IsTrue(File.Exists(file), "deployment failed: " + file +
                " did not get deployed");
        }
    }
}

17
DeploymentItem özniteliği, sınıftaki her testi etkilemek için sınıf düzeyinde de belirtilebilir.
Hannes Nel

24
Bir alt klasörde öğeleriniz varsa bunu dağıtım alt dizinine de dahil edeceğinizi unutmayın [DeploymentItem ("SubFolder \ testFile1.xml", "SubFolder")]
omgtitb

31
Thomas'ın yorumuna ek olarak, RelativePathRoot için varsayılan değer Çözüm Klasörüdür, dolayısıyla çözümünüz şöyle görünüyorsa (.. \ SolutionFolder \ TestProject \ TestData \ aFile.txt) DeploymentItem'iniz şöyle görünecektir .. ([DeploymentItem (@ "TestProject \ TestData \ aFile.txt", "TestData")]) .. ve bunu kullanarak testte dosyaya başvurursunuz .. (string file = @ "TestData \ aFile.txt";)
Michael Dausmann

6
VS2010 için DeploymentItemAttribute belgeleri : Bu öznitelik, bir test yönteminde veya bir test sınıfında belirtilebilir.
Alex Che

12
Gördüğüm ve bahsetmediğim çoğu gönderi, eğer bunu çalıştıramazsanız, muhtemelen Test -> Test Ayarlarını Düzenle -> 'ye giderseniz bulabileceğiniz "Dağıtımı Etkinleştir" onay kutusunu işaretlemeniz gerektiğidir. local (local.testsettings) -> Dağıtım sekmesi. Bunu yaptım ve sonra DeploymentItem iyi çalıştı.
Dave

26

Görünüşe göre Çözüm için bir TestSettings dosyası sağlarsanız, "Dağıtımı etkinleştir" seçeneğinin işaretini kaldırabilir ve mstest'in ...TestResults\...\outfazladan dosyalarınızı kopyalamadığı klasörden çalıştırmayı denemesini durdurabilirsiniz (bunları bir dağıtım seçeneği yapmadığınız sürece) .

Bu ayrıca, ekstra dosyaların korunmuş bir klasör yapısında olmasına bağlıysanız da kullanışlıdır, çünkü TestSettings'deki Dağıtım, Klasör Ekle seçeneğini kullanırsanız, Dağıtım öğelerinin tümü geçici çalıştırma klasörüne (dışarı) doğrudan kopyalanır (düz) Yukarıdaki yanıtlar, her öğeyi kendi DeploymentItem olarak eklerseniz yapıyı koruyabileceğinizi önerir).

Benim için doğrudan Visual Studio'da iyi çalışan testler çalıştı (yani yapılarındaki fazladan dosyalarım bulundu ve testler tarafından kullanıldı) çünkü uzun zaman önce başka bir nedenle (Dağıtımı etkinleştir seçeneğinin işaretli olmadığı) bir TestSettings dosyası oluşturdum, ancak TeamCity TestSettings dosyasının kullanılması gerektiğini belirtmediğim için testleri çalıştırmak için mstest çalıştırdım.

Visual Studio bir TestSettings dosya oluşturmak için, sağ tıklayıp Çözüm ve Yeni Öğe seçin ve TestSettings şablonu seçin. TestSettings dosyasını mstest.exe komut isteminde kullanmak için seçeneği /testsettings:C:\Src\mySolution\myProject\local.testsettings ekleyin (veya uygun yolla TeamCity'de ekstra bir komut satırı seçeneği olarak ekleyin)



3

Benim için en iyi çözüm, özellikle birden çok test aynı veri dosyasına ihtiyaç duyuyorsa, test ayarlarını kullanmaktır.

Önce bir test ayarları dosyası oluşturun ve ihtiyacınız olan dağıtım öğelerini ekleyin (dosya veya klasör adı):

<TestSettings name="Local" id="00ebe0c6-7b64-49c0-80a5-09796270f111" xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2010">
  <Description>These are default test settings for a local test run.</Description>
  <Deployment>
    <DeploymentItem filename="Folder1\TestScripts\test.xml" outputDirectory="TestScripts"/>
    <DeploymentItem filename="Folder2\TestData\" outputDirectory="TestData"/>
  </Deployment>
<...../>
  • Visual Studio'da çalışırken, yeni test ayarlarını seçmek için "Test \ Test Ayarları" menüsünden "Test Ayarları Dosyasını seçin" seçeneğini kullanın

  • Mstest'i çalıştırırken, mstest'in test ayarlarınızı kullanmasını sağlamak için / testingettings parametresini kullanın.


2

AssemblyInitialize özniteliğiyle bir yöntemi tutan bir sınıfta DeploymentItem'i tanımlayabilirsiniz. Ardından, hangi testi çalıştırdığınızdan bağımsız olarak dosyaların kopyalandığından emin olursunuz.

Ne yazık ki DeploymentItem özniteliği yalnızca çalıştırdığınız testleri içeren sınıflarda çalıştırılır. Dolayısıyla, aynı dosya kümesini kullanan 10 test sınıfınız varsa, özniteliği hepsine eklemeniz gerekir.

Ayrıca * .testsettings dosyalarındaki değişikliklerin Visual Studio'da otomatik olarak yenilenmediğini öğrendiniz. Bu nedenle, test ayarlarında dağıtıma dosya / klasör ekledikten sonra, çözüm dosyasını yeniden açmanız ve ardından testleri çalıştırmanız gerekir.


2

Visual Studio 2012'de, vstest.console.exe (yerleşik test çalıştırıcısı), geçerli yol olarak çıktı diziniyle çalışır. Bu, testiniz tarafından kullanılmaları için, yalnızca 'Her zaman kopyala' veya 'Daha yeniyse kopyala' özelliğiyle çözümünüze öğeleri eklemeniz gerektiği anlamına gelir. Genel durum için DeploymentItem özniteliğine ihtiyacınız yoktur. Aynı durum, çıktı / test dizininizin içindeki komut satırından vstest.console.exe'yi çalıştırırken de geçerlidir.

Ayrı bir klasörün kullanıldığı bazı durumlar vardır, bunlardan biri DeploymentItem özniteliğini kullandığınız zamandır. Daha fazla bilgi için buraya bakın .

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.