Salin file MSTest ke folder uji coba

108

Saya punya tes yang membutuhkan file XML untuk dibaca dan kemudian diurai. Bagaimana caranya agar file ini disalin ke folder uji coba setiap kali?

File XML disetel ke "Salin jika lebih baru" dan mode kompilasi "tidak ada" (karena ini sebenarnya bukan hal yang dapat dikompilasi)

Aaron Powell
sumber

Jawaban:

131

menggunakan DeploymentItematribut

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");
        }
    }
}
Preet Sangha
sumber
17
Atribut DeploymentItem juga dapat ditentukan di tingkat kelas, untuk memengaruhi setiap pengujian di kelas.
Hannes Nel
24
Jangan lupa bahwa jika Anda memiliki item dalam subfolder untuk juga disertakan di subdirektori penerapan [DeploymentItem ("SubFolder \ testFile1.xml", "SubFolder")]
omgtitb
31
Lebih lanjut dari komentar Thomas, Nilai default untuk RelativePathRoot adalah Folder Solusi, jadi jika solusi Anda terlihat seperti ini (.. \ SolutionFolder \ TestProject \ TestData \ aFile.txt) DeploymentItem Anda akan terlihat seperti ini .. ([DeploymentItem (@ "TestProject \ TestData \ aFile.txt", "TestData")]) .. dan Anda akan mereferensikan file dalam pengujian menggunakan ini .. (string file = @ "TestData \ aFile.txt";)
Michael Dausmann
6
Dokumentasi DeploymentItemAttribute untuk VS2010 : Atribut ini dapat ditentukan pada metode pengujian atau pada kelas pengujian.
Alex Che
12
Apa yang kebanyakan posting saya lihat yang gagal untuk disebutkan adalah bahwa jika Anda tidak dapat membuat ini bekerja, Anda mungkin perlu mencentang kotak "Aktifkan Penerapan", yang dapat Anda temukan jika Anda pergi ke Tes -> Edit Pengaturan Tes -> local (local.testsettings) -> tab Deployment. Saya baru saja melakukan ini dan kemudian DeploymentItem berfungsi dengan baik.
Dave
26

Tampaknya jika Anda menyediakan file TestSettings untuk Solusi, Anda dapat menghapus centang pada opsi "Aktifkan penerapan" dan menghentikan mstest untuk mencoba menjalankan dari ...TestResults\...\outfolder yang tidak menyalin file tambahan Anda (kecuali jika Anda menjadikannya sebagai opsi penerapan) .

Ini juga berguna jika Anda bergantung pada file tambahan yang ada dalam struktur folder yang dipertahankan karena item Deployment semuanya tampaknya disalin secara langsung (datar) ke dalam folder run sementara (keluar) jika Anda menggunakan opsi Deployment, Add Folder di TestSettings ( jawaban di atas menyarankan Anda dapat mempertahankan struktur jika Anda menambahkan setiap item sebagai DeploymentItem-nya sendiri).

Bagi saya itu bekerja dengan baik menjalankan tes langsung di Visual Studio (yaitu file tambahan saya dalam struktur mereka ditemukan dan digunakan oleh tes) karena saya telah membuat file TestSettings untuk alasan lain sejak lama (yang telah mengaktifkan penyebaran tidak dicentang), tetapi tidak ketika TeamCity menjalankan mstest untuk menjalankan pengujian karena saya belum menentukan bahwa file TestSettings harus digunakan.

Untuk membuat file TestSettings di Visual Studio, klik kanan pada Solution dan pilih New Item, dan pilih template TestSettings. Untuk menggunakan file TestSettings pada prompt perintah mstest.exe tambahkan opsi, /testsettings:C:\Src\mySolution\myProject\local.testsettings (atau tambahkan sebagai opsi baris perintah tambahan di TeamCity dengan jalur yang sesuai)

TamW
sumber
3

Solusi terbaik bagi saya adalah menggunakan setelan pengujian, terutama jika beberapa pengujian memerlukan file data yang sama.

Pertama buat file setelan pengujian, dan tambahkan item penerapan yang Anda perlukan (nama file atau folder):

<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>
<...../>
  • Berjalan di studio visual, gunakan "pilih File Pengaturan Tes" dari menu "Tes \ Pengaturan Tes" untuk memilih pengaturan tes baru

  • Menjalankan mstest, gunakan parameter / testsettings agar mstest menggunakan setelan pengujian Anda.

FrankyHollywood
sumber
2

Anda dapat menentukan DeploymentItem di kelas yang menyimpan metode dengan atribut AssemblyInitialize. Kemudian Anda yakin bahwa file tersebut disalin terlepas dari tes mana yang Anda jalankan.

Sayangnya, atribut DeploymentItem dijalankan hanya pada kelas yang berisi pengujian yang Anda jalankan. Jadi jika Anda memiliki 10 kelas pengujian yang menggunakan kumpulan file yang sama, Anda harus menambahkan atribut ke semuanya.

Juga menemukan bahwa perubahan dalam file * .testsettings tidak secara otomatis di-refresh di Visual Studio. Oleh karena itu, setelah menambahkan file / folder ke dalam penerapan di setelan pengujian, Anda harus membuka kembali file solusi dan kemudian menjalankan pengujian.

Sielu
sumber
2

Dalam Visual Studio 2012, vstest.console.exe (pelari pengujian bawaan) berjalan dengan output dir sebagai lintasan saat ini. Ini berarti bahwa Anda hanya perlu menyertakan item dalam solusi Anda dengan properti 'Salin selalu' atau 'Salin jika lebih baru' untuk digunakan dalam pengujian Anda. Anda tidak memerlukan atribut DeploymentItem untuk kasus umum. Hal yang sama berlaku saat menjalankan vstest.console.exe dari baris perintah di dalam direktori output / test Anda.

Ada beberapa kasus di mana folder terpisah digunakan, salah satunya adalah saat Anda menggunakan atribut DeploymentItem. Lihat di sini untuk informasi lebih lanjut.

acarlon.dll
sumber