2013-01-11 30 views
7

Chúng tôi đang viết bài kiểm tra đơn vị cho lớp kinh doanh của chúng tôi chạy trong .NET 4.0. Lớp nghiệp vụ là một thư viện lớp C# đơn giản, thường chạy trong các dịch vụ web SOAP và REST. Ứng dụng của chúng tôi sử dụng log4net trong một hội đồng bao bọc riêng biệt để ghi nhật ký. Mã C# trong bản ghi nhật ký có một chỉ thị thông tin lắp ráp cho biết tên tệp cấu hình của log4net, a la-Log4net không thể tìm thấy tệp cấu hình khi chạy từ Visual Studio/Microsoft Test Framework

[assembly: log4net.Config.XmlConfigurator (ConfigFile = "AcmeLogging.config", Watch = true) ]

Khởi tạo log4net qua trình bao bọc hoạt động tốt trong các dịch vụ web. Khi chúng ta khởi tạo nó với assembly unit unit của chúng ta, nó không xuất hiện để xem file cấu hình. File configuratino được cấu hình thông qua các thuộc tính được sao chép vào thư mục thực thi, và chúng ta thấy nó trong thư mục bin \ debug. Một chương trình kiểm tra giao diện điều khiển nhanh bằng cách sử dụng cụm ghi nhật ký chạy từ bên trong cùng một thư mục đó hoạt động tốt. Điều kỳ lạ là các vấn đề hành vi không liên tục, và bật lên trên các máy phát triển khác nhau tại các thời điểm khác nhau và không thể được chữa khỏi theo bất kỳ cách xác định nào.

Bước qua mã lắp ráp trình bao bọc, cuộc gọi log4netLogManager.GetLogger() xuất hiện để trả về chính xác, nhưng danh sách các ứng dụng được trả về bởi log.Logger.Repository.GetAppenders() trống. Vì hành vi không chính xác này giống nhau cho dù tệp nằm trong thư mục Bin \ Debug hay không, chúng tôi tin rằng nó không thấy tệp.

Bất kỳ manh mối nào về những gì chúng tôi thiếu về việc chạy log4net trong Microsoft Test Framework sẽ được đánh giá cao.

Trả lời

8

Kiểm tra đơn vị là duy nhất trong thực tế là nếu bạn cần tệp cấu hình trong các bài kiểm tra đơn vị của bạn, bạn cần phải bao gồm chúng dưới dạng mục triển khai. Dưới đây là một ví dụ về cách tôi làm điều này trong lớp thử nghiệm của tôi:

[TestClass] 
[DeploymentItem("hibernate.cfg.xml")] 
public class AsyncForwardingAppenderTest 
{ 

} 

Ngoài các Deployment thuộc tính bạn cần phải Enable Deployment trong cài đặt thử nghiệm của bạn. Để thực hiện việc này, hãy vào Test-> Edit Test Settings->. Sau đó, nhấp vào khu vực Deployment ở bên phải. Nhấp vào hộp kiểm Enable Deployment.

Sau khi thực hiện việc này và chạy thử nghiệm, tệp cấu hình của bạn phải nằm trong thư mục kết quả thử nghiệm của bạn. TestResults \ username_machine date stamp \ Out. Nếu tập tin cấu hình của bạn không nằm trong thư mục này, nó sẽ không hoạt động. Đây là những gì thuộc tính DeploymentItem thực hiện. Nó dính tập tin vào thư mục Out này.

Nếu bạn không muốn bao gồm thuộc tính DeploymentItem trên mọi lớp thử nghiệm, tôi đã tạo một lớp kiểm tra cơ sở cho tất cả các thử nghiệm sử dụng log4net kế thừa và đánh dấu nó bằng thuộc tính DeploymentItem.

+0

Đây chính xác là những gì chúng tôi cần, điều này sẽ làm cho cả nhóm rất vui. Cảm ơn nhiều. Tôi muốn bỏ phiếu cho câu trả lời này, nhưng không có đủ hoạt động SO để làm như vậy - nhưng độc giả trong tương lai nên xem xét việc bỏ phiếu bổ sung cho câu trả lời này. –

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