Tệp sao chép MSTest vào thư mục chạy thử nghiệm


108

Tôi đã có một bài kiểm tra yêu cầu đọc tệp XML và sau đó được phân tích cú pháp. Làm cách nào tôi có thể sao chép tệp này vào thư mục chạy thử nghiệm mỗi lần?

Tệp XML được đặt thành "Sao chép nếu mới hơn" và chế độ biên dịch là "không" (vì nó không thực sự là thứ có thể biên dịch)

Câu trả lời:


131

sử dụng một DeploymentItemthuộc tính

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
Thuộc tính DeploymentItem cũng có thể được chỉ định ở cấp độ lớp, để ảnh hưởng đến mọi thử nghiệm trong lớp.
Hannes Nel

24
Đừng quên rằng nếu bạn có các mục của bạn trong một thư mục con để cũng bao gồm trong thư mục con triển khai [DeploymentItem ( "thư mục con \ testFile1.xml", "thư mục con")]
omgtitb

31
Ngoài nhận xét của Thomas, Giá trị mặc định cho RelativePathRoot là Thư mục Giải pháp, vì vậy nếu giải pháp của bạn trông giống như thế này (.. \ SolutionFolder \ TestProject \ TestData \ aFile.txt) DeploymentItem của bạn sẽ trông giống như thế này .. ([DeploymentItem (@ "TestProject \ TestData \ aFile.txt", "TestData")]) .. và bạn sẽ tham chiếu tệp trong bài kiểm tra bằng cách sử dụng tệp này .. (string file = @ "TestData \ aFile.txt";)
Michael Dausmann

6
Tài liệu DeploymentItemAttribute cho VS2010 : Thuộc tính này có thể được chỉ định trên một phương pháp thử nghiệm hoặc trên một lớp thử nghiệm.
Alex Che

12
Điều mà hầu hết các bài viết tôi đã thấy không đề cập đến là nếu bạn không thể làm cho điều này hoạt động, có thể bạn cần phải chọn hộp kiểm "Bật triển khai", bạn có thể tìm thấy hộp kiểm này nếu bạn đi tới Kiểm tra -> Chỉnh sửa cài đặt kiểm tra -> cục bộ (local.testsettings) -> tab Triển khai. Tôi vừa làm điều này và sau đó DeploymentItem hoạt động tốt.
Dave

26

Có vẻ như nếu bạn cung cấp tệp TestSettings cho Giải pháp thì bạn có thể bỏ chọn tùy chọn "Bật triển khai" và ngừng cố gắng chạy từ ...TestResults\...\outthư mục nơi nó không sao chép các tệp bổ sung của bạn (trừ khi bạn đặt chúng thành tùy chọn triển khai) .

Điều này cũng hữu ích nếu bạn phụ thuộc vào các tệp bổ sung nằm trong cấu trúc thư mục được bảo toàn bởi vì tất cả các mục Triển khai dường như được sao chép trực tiếp (phẳng) vào thư mục chạy tạm thời (ngoài) nếu bạn sử dụng tùy chọn Triển khai, Thêm thư mục trong TestSettings ( các câu trả lời ở trên gợi ý rằng bạn có thể giữ cấu trúc nếu bạn thêm từng mục làm DeploymentItem của riêng nó).

Đối với tôi, nó hoạt động tốt khi chạy các bài kiểm tra trực tiếp trong Visual Studio (tức là các tệp bổ sung của tôi trong cấu trúc của chúng đã được các bài kiểm tra tìm thấy và sử dụng) vì tôi đã tạo tệp TestSettings vì một lý do khác từ lâu (đã bỏ chọn Bật triển khai), nhưng không phải khi TeamCity chạy mstest để chạy thử nghiệm vì tôi chưa chỉ định rằng tệp TestSettings nên được sử dụng.

Để tạo tệp TestSettings trong Visual Studio, hãy nhấp chuột phải vào Giải pháp và chọn Mục mới, và chọn mẫu TestSettings. Để sử dụng tệp TestSettings tại dấu nhắc lệnh của mstest.exe, hãy thêm tùy chọn, /testsettings:C:\Src\mySolution\myProject\local.testsettings (hoặc thêm dưới dạng tùy chọn dòng lệnh bổ sung trong TeamCity với đường dẫn thích hợp)



3

Giải pháp tốt nhất đối với tôi là sử dụng các cài đặt thử nghiệm, đặc biệt nếu nhiều thử nghiệm cần cùng một tệp dữ liệu.

Trước tiên, hãy tạo một tệp cài đặt thử nghiệm và thêm các mục triển khai bạn cần (tên tệp hoặc thư mục):

<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>
<...../>
  • Chạy trong studio trực quan, sử dụng "chọn Tệp Cài đặt Kiểm tra" từ trình đơn "Kiểm tra \ Cài đặt Kiểm tra" để chọn các cài đặt kiểm tra mới

  • Chạy mstest, sử dụng tham số / testsettings để mstest sử dụng các cài đặt kiểm tra của bạn.


2

Bạn có thể định nghĩa DeploymentItem trong một lớp chứa một phương thức có thuộc tính AssemblyInitialize. Sau đó, bạn chắc chắn rằng các tệp được sao chép bất kể bạn chạy thử nghiệm nào.

Thật không may, thuộc tính DeploymentItem chỉ được thực thi trên các lớp có chứa các thử nghiệm bạn đang chạy. Vì vậy, nếu bạn có 10 lớp kiểm tra sử dụng cùng một bộ tệp, bạn phải thêm thuộc tính cho tất cả chúng.

Cũng phát hiện ra rằng các thay đổi trong tệp * .testsettings không được tự động làm mới trong Visual Studio. Do đó sau khi thêm tệp / thư mục vào triển khai trong cài đặt thử nghiệm, bạn phải mở lại tệp giải pháp và sau đó chạy thử nghiệm.


2

Trong Visual Studio 2012, vstest.console.exe (trình chạy thử nghiệm tích hợp sẵn) chạy với dir đầu ra là đường dẫn hiện tại. Điều này có nghĩa là bạn chỉ cần đưa các mục vào giải pháp của mình với thuộc tính 'Sao chép luôn luôn' hoặc 'Sao chép nếu mới hơn' để thử nghiệm của bạn sử dụng chúng. Bạn không cần thuộc tính DeploymentItem cho trường hợp chung. Điều tương tự cũng áp dụng khi chạy vstest.console.exe từ dòng lệnh bên trong thư mục đầu ra / thử nghiệm của bạn.

Có một số trường hợp sử dụng một thư mục riêng biệt, một trong số đó là khi bạn đang sử dụng thuộc tính DeploymentItem. Xem tại đây để biết thêm thông tin.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.