2011-10-17 12 views
9

Tôi đang làm việc trên một ứng dụng và tôi đã tạo một số bài kiểm tra đơn vị cho nó. Dự án với lớp thử nghiệm phụ thuộc vào 3 tệp DLL của bên thứ ba. Khi tôi đi đến thư mục bin \ Debug cho dự án thử nghiệm, các Dll có ở đó. Nhưng khi tôi chạy thử nghiệm, các DLL không được sao chép vào thư mục TestResult \\ Out.Làm cách nào để tôi có được Bài kiểm tra Đơn vị để sao chép các tệp DLL của tôi và các tệp khác khi tôi chạy thử nghiệm?

Ngoài ra còn có tệp log4net.config từ dự án khác mà tôi muốn sao chép. Cái này không hiển thị trong thư mục bin \ Debug của dự án thử nghiệm, vì vậy đó là một vấn đề khác mà tôi phải khắc phục.

Làm cách nào để tôi có thể sao chép các tệp này khi chạy thử nghiệm đơn vị?

Tony

+1

Thử nghiệm đơn vị của bạn là gì? NUnit? MSTest? – vcsjones

+0

MSTest, tôi nghĩ vậy. Công cụ có trong Visual Studio 2010. –

Trả lời

5

Chúng tôi có thư mục bin chứa DLL của bên thứ ba phải là một phần của bản dựng. Chúng được gắn cờ với thuộc tính 'bản sao cục bộ' trong tham chiếu.

Đối với các tệp riêng lẻ, bạn có thể thực hiện tương tự - Đặt 'Sao chép sang thư mục đầu ra' thành đúng.

+0

Cảm ơn! Điều đó đã sửa các DLL. Tôi không hoàn toàn hiểu làm thế nào để khắc phục vấn đề với tập tin log4net.config. Đó là một trong dự án khác và có nó là "Copy to Output Directory" bất động sản thiết lập để "Sao chép nếu mới hơn" (Tôi đang sử dụng VS 2010). Nhưng nó không được sao chép vào thư mục bin \ Debug của dự án Thử nghiệm và thử nghiệm phụ thuộc vào dự án đó. –

0

Sao chép dll này (ngoài việc tham chiếu chúng - nơi bạn có thể nói Copy Local) và đưa chúng vào thư mục ngoài không phải là một phần của thử nghiệm, mà là một phần của quá trình xây dựng/đóng gói của bạn. Có xây dựng kịch bản mà làm sao chép cần thiết của các dlls.

+0

Các DLL được tham chiếu nhưng chúng không được sao chép. Đó là vì thuộc tính Copy Local cho các DLL đó là sai. Chúng không phải là một phần của quá trình thử nghiệm, ngoại trừ việc chúng được sử dụng bởi mã. –

9

Bạn có thể sử dụng DeploymentItemAttribute để sao chép tệp vào thư mục bin (hoặc thư mục khác).

[TestMethod()] 
[DeploymentItem("log4net.config")] 
public void SomeTest() 
{ 
    ... 
} 
+0

Tôi sẽ thử một lần khi tôi trở lại làm việc vào buổi sáng. Điều đó có vẻ đầy hứa hẹn! –

+0

Bạn vừa mới cứu mạng tôi! Cảm ơn rất nhiều. – RoadBump

0

Khi bạn gỡ lỗi khỏi studio, hãy sử dụng thuộc tính triển khai trên lớp hoặc phương pháp thử để sao chép các tệp DLL và cấu hình cần thiết vào thư mục Out. Nếu bạn chạy từ dòng lệnh, hãy sử dụng tệp TestSettings và vô hiệu hóa tùy chọn Triển khai và đặt thư mục BIN của bạn làm thư mục làm việc. Sử dụng/tham khảo tệp TestSettings này trong dòng lệnh của bạn để chạy mstest. Bằng cách này, bạn có thể chạy mstest ngay trong thư mục BIN của bạn mà không đổ các DLL vào một thư mục. Một lần nữa, sử dụng thuộc tính triển khai để gỡ lỗi từ studio, có các kiểm tra sẽ không hoạt động.

1

Tôi đã tìm thấy nếu các thử nghiệm của bạn đang được triển khai đến khu vực thử nghiệm (theo mặc định), sao chép địa phương sẽ không hoạt động trong một số trường hợp như tải lắp ráp động.

Bạn có thể chuyển sang triển khai này ra bằng cách sử dụng một tập tin runsettings (https://msdn.microsoft.com/en-us/library/ms182475.aspx) và

<DeploymentEnabled>False</DeploymentEnabled> 

Hoặc, một hack nhỏ (hơi xấu xí như nó đòi hỏi tay/cứng mã hóa lắp ráp), bằng cách sử dụng một DeploymentItem cho nhị phân (đề cập trong câu trả lời khác, nhưng, không cụ thể để xử lý dlls theo OP):

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

Đề nghị làm cả hai debug/release, tùy thuộc vào những gì được sử dụng trên CI/Dev của bạn.

Các vấn đề liên quan