Làm cách nào tôi có thể nhận được Sao chép vào thư mục đầu ra. Làm việc với các bài kiểm tra đơn vị?


123

Khi tôi xây dựng một dự án thử nghiệm đơn vị trước khi các thử nghiệm được thực thi, đầu ra thử nghiệm được sao chép vào thư mục TestResults và sau đó các thử nghiệm được thực thi. Vấn đề tôi gặp phải là không phải tất cả các tệp trong thư mục Debug / bin đều được sao chép vào dự án TestResults.

Làm cách nào tôi có thể nhận được một tệp được sao chép vào thư mục Debug / bin để được sao chép vào thư mục TestResults?

Câu trả lời:


121

Cách tiêu chuẩn để thực hiện việc này là chỉ định các mục triển khai trong .testrunconfigtệp, có thể được truy cập thông qua mục Chỉnh sửa cấu hình chạy thử trong menu Visual Studio Test hoặc trong thư mục Mục giải pháp .


15
Trong VS2010, đây là: Kiểm tra / Chỉnh sửa Cài đặt kiểm tra / cục bộ, sau đó trong danh sách, chọn "Triển khai", chọn hộp "Bật ..." và thêm (các) tệp.
Marcel

18
Bạn có thể phải đóng giải pháp của mình (hoặc thậm chí Visual Studio) và mở lại trước khi thay đổi này có hiệu lực đúng cách
RobV

RobV, bạn đã làm cho ngày của tôi. CẢM ƠN!
Ignacio Soler Garcia

2
Nếu bạn sử dụng thuộc tính [DeploymentItem] trong mã, bạn không cần chỉ định các tệp trong hộp thoại - xem mã @ tomfanning bên dưới.
Patrick Szalapski

Điều này không giải quyết được vấn đề của tôi khi sao chép đầu ra cấu hình từ thư mục bin hoặc thư mục phát hành vì tại thời điểm thiết kế tôi không có thông tin về việc tệp sẽ nằm trong thư mục gỡ lỗi hoặc phát hành và đối với tôi đó là tệp không được sao chép vào thư mục Out trong kết quả kiểm tra
Gurpreet

61

Bạn có thể chỉ định thuộc tính triển khai như một ví dụ hiển thị bên dưới; Ngoài ra, bạn cần đặt thuộc tính "Nội dung" & "Sao chép nếu mới hơn" (không có tài liệu nào về các cài đặt sau này, nhưng bạn đã đặt chúng để làm cho nó hoạt động.

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



}

3
Bạn vẫn cần kích hoạt điều này. Như Mercel đã viết trong bình luận của mình, trong VS2010, đây là: Kiểm tra / Chỉnh sửa Cài đặt kiểm tra / cục bộ, sau đó trong danh sách, chọn "Triển khai", chọn hộp "Bật ...".
Patrick Szalapski

Tôi đang vật lộn với vấn đề này trong Visual Studio 2012 Express và vì đây là phiên bản giới hạn nên khó tìm được tài liệu rõ ràng. Cảm ơn bạn rất nhiều vì câu trả lời này.
DavidHyogo

2
Công trình tuyệt vời. Tôi thực sự nghĩ rằng đây là phương pháp tốt hơn và trả lời vì nó ghi lại các tệp cần thiết ngay phía trên testmethod.
bu5hm4nn

1
Tôi thấy rằng thuộc tính DeploymentItem cũng hoạt động khi được chỉ định ở cấp lớp kiểm tra (thay vì cấp phương thức).
Jon Schneider

10

Tôi đã phải bật "Kích hoạt triển khai" bên dưới Test -> Edit Test Settings -> Local -> Deploymentđể [DeploymentItem]thuộc tính hoạt động.


Đây là sự thật ... Tôi chỉ kích hoạt nó và bây giờ thuộc tính hoạt động. Cảm ơn!
Miguel Angelo

Như đã đề cập trong nhận xét của tôi cho một câu trả lời khác, tôi đang vật lộn với cùng một vấn đề trong visual studio 2012 express và cuối cùng 2 câu trả lời đã cho tôi giải pháp.
DavidHyogo

5

Tất cả ba câu trả lời đều đúng, tùy thuộc vào nhu cầu của bạn.

Thêm tệp để triển khai trong .testrunconfig (.testsinstall trong VS2010) sẽ sao chép tất cả các tệp đó vào mọi thư mục đầu ra thử nghiệm, ngay cả đối với các thử nghiệm không liên quan chạy riêng rẽ. Nếu bạn chạy một thử nghiệm, tất cả các tệp dữ liệu thử nghiệm được liệt kê trong phần triển khai của .testss settings sẽ được sao chép vào thư mục đầu ra thử nghiệm.

Trong các thử nghiệm của mình, tôi cần sao chép một tệp XML dự kiến ​​vào thư mục đầu ra thử nghiệm để so sánh với XML đầu ra thử nghiệm thực tế. Tôi sử dụng thuộc tính DeploymentItem để chỉ sao chép tệp XML liên quan đến (các) thử nghiệm đang được chạy. Trong VS2010, tôi đã phải kích hoạt triển khai trong tệp .testsinstall (nhưng không thêm bất kỳ đường dẫn nào) và sau đó tham chiếu đường dẫn tệp XML liên quan đến TestProject trong DeploymentItem.

Hi vọng điêu nay co ich.


2
Vấn đề của tôi là Đường dẫn tương đối được đề cập ở đây, tôi nghĩ rằng Xml nên có trong thư mục mà bài kiểm tra đã có, nhưng nó cần phải nằm trong thư mục gốc của dự án hoặc được mở đầu bằng thư mục mà nó nằm trong.
Wes Grant

2

Tôi gặp vấn đề tương tự nhưng tôi phải làm với việc chỉ vào tệp TraceAndTestImpact.testsinstall thay vì tệp Local.testsinstall. Bạn có thể thay đổi từ cái này sang cái khác trong menu Test / Chọn Active Test Settings.


2

Chỉ muốn nâng cao câu trả lời được chấp nhận bằng cách đề cập đến một cách để khiến nó được triển khai cụ thể cho dll chứ không phải là phương pháp thông thường sử dụng nó cho dữ liệu hoặc cấu hình, v.v., trong trường hợp CopyLocal không hoạt động:

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

1

Các hoạt động sau đây trong VS2012 cho các dự án thử nghiệm được bao gồm trong nhiều giải pháp mà không cần sử dụng tệp thử nghiệm:

1) Sắp xếp các tệp và thư mục bạn muốn triển khai vào một thư mục trong thư mục dự án thử nghiệm.

2) Trong thuộc tính dự án, tạo một bước xây dựng bài

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

$(ProjectDir)$(TargetDir)là các macro sẽ được giải thích bởi VS và nên được đưa vào như vậy.

<Project_Folder_Name> là tên của thư mục được tạo ở bước 1.

<Deployment_Folder_Name>là tên của thư mục trong đó các tập tin thử nghiệm sẽ được triển khai và cần được đặt tên như vậy mà nó sẽ là duy nhất khi nhiều dự án thử nghiệm được triển khai để cùng một thư mục, ví dụ <Project_Name>_TestInputs.

Các tệp thử nghiệm trong các vị trí được chia sẻ cũng nên được sao chép vào thư mục triển khai thư mục đích để hạn chế các tương tác thử nghiệm. Cung cấp đường dẫn nguồn liên quan đến $(ProjectDir)macro. Ví dụ "$(ProjectDir)..\..\Common Files\C1219TDL-2008.xml".

3) Thêm một thuộc [DeploymentItem(source, destination)]tính cho mỗi phương thức thử nghiệm sử dụng tệp triển khai (thực tiễn tốt nhất) hoặc vào lớp thử nghiệm (thực hành dễ dàng hơn cho người lười biếng hoặc vội vàng và cách dễ nhất để cập nhật dự án các đường dẫn tương đối được sử dụng trước đó hoặc tệp cài đặt thử nghiệm ).

Trên một phương thức thử nghiệm, sourcelà đường dẫn đến tệp hoặc thư mục được sử dụng trong phương thức thử nghiệm so với thư mục đích được tạo bởi xcopydestinationlà đường dẫn đến thư mục mà nó sẽ được tạo so với thư mục triển khai. Vì vậy, các bài kiểm tra chạy nhất quán trong thư mục đích hoặc thư mục triển khai. Đường dẫn đích phải giống như đường dẫn nguồn không có tham chiếu tệp. Ví dụ : [DeploymentItem("Example_TestInputs\C1219TDL-2008.xml","Example_TestInputs")]. Các DeploymentItemnên được bao gồm trên tất cả các phương pháp sử dụng mà tập tin hoặc thư mục.

Trên một lớp sourcedestinationcả hai tên của thư mục được tạo trong thư mục đích bởi xcopy; điều này sẽ sao chép toàn bộ thư mục vào thư mục triển khai khi bất kỳ kiểm tra nào trong lớp được chạy. Thí dụ:[DeploymentItem("Example_TestInputs","Example_TestInputs")]

4) Trong các phương thức thử nghiệm, giờ đây bạn có thể truy cập các tệp và thư mục một cách tự tin rằng chúng sẽ nằm trong thư mục làm việc bất kể Visual Studio đã quyết định đặt nó vào ngày hôm đó, ví dụ như thế nào File.Exists(".\Example_TestInputs\C1219TDL-2008.xml").


0

Hãy thử dòng lệnh sự kiện Post-Build từ bên trong Visual Studio (nếu bạn đang sử dụng IDE đó).


3
Tôi, nhưng đó có vẻ là một chút hack. Đây phải là một kịch bản khá phổ biến và tôi hy vọng chỉ có một số tùy chọn hoặc tài sản mà tôi không thiết lập đúng.
Eric Schoonover

0

Trong Visual Studio 2012, bạn không cần thuộc tính DeploymentItem cho trường hợp đơn giản. Xem câu trả lời của tôi ở đây


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

Câu trả lời được chấp nhận là chính xác và hầu hết các câu trả lời khác cũng vậy. Tuy nhiên, trong nhiều năm qua, tôi đã thấy rằng hệ thống Deploment của Visual Studio Unit Tests sử dụng DeploymentAttribtueCopy to Output trở nên cồng kềnh nếu bạn có số lượng lớn tệp dữ liệu. Tôi đã thấy rằng việc giữ các tệp ở vị trí ban đầu của chúng hoạt động tốt hơn.

Chi tiết đầy đủ trong câu trả lời khác của tôi ở đây. https://stackoverflow.com/a/53004985/2989655

Hi vọng điêu nay co ich.

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.