2009-10-14 28 views
5

Tất cả: Tôi có một thử nghiệm đơn vị là chức năng thử nghiệm yêu cầu tệp đầu vào. Thử nghiệm này được xây dựng bằng tính năng thử nghiệm đơn vị tích hợp sẵn của VS 2008.Kiểm thử đơn vị với một tệp đầu vào

Vấn đề của tôi là tệp cần được phát hiện bằng kiểm tra đơn vị. Tuy nhiên, khi chạy thử nghiệm, nó chạy từ thư mục "đầu ra" tạm thời trong thư mục kết quả kiểm tra. Nó không thể tìm thấy tập tin đầu vào của tôi.

Tôi đã thêm tệp vào dự án thử nghiệm đơn vị, với hành động biên dịch là "không" và tùy chọn sao chép sang thư mục đầu ra của "sao chép nếu mới hơn", nhưng bản sao xuất hiện trong thư mục đầu ra VS bình thường (dưới bin), và không vào thư mục thực hiện kiểm tra đơn vị, do đó không tìm thấy tệp. Tôi không muốn hardcode đường dẫn đến tập tin, như thử nghiệm nên chạy cho bất cứ ai kiểm tra các bài kiểm tra đơn vị. Tôi có thể đặt tệp đầu vào vào thư mục giải pháp và để mã kiểm tra "khám phá" tệp bằng cách hardcoding một đường dẫn tương đối sao lưu cây, nhưng tôi thấy rằng đây phải là vấn đề phổ biến, vì vậy tôi muốn kiểm tra xem đã thiếu một cái gì đó.

Trả lời

4

Thêm tệp dưới dạng tài nguyên vào nhóm thử nghiệm của bạn. Sau đó, bạn có thể tải nó trong thời gian chạy thông qua Assembly.GetManifestResourceStream trong thiết lập thử nghiệm của bạn.

Dưới đây là một phương pháp thuận tiện tôi sử dụng để tải các tài nguyên:

public static class ResLoader 
{   
    public static string AsString<T>(string resName) 
    { 
     using (var reader = new StreamReader(Assembly.GetAssembly(typeof(T)) 
           .GetManifestResourceStream(resName))) 
     { 
      return reader.ReadToEnd(); 
     } 
    } 
} 

T là bất kỳ lớp chứa trong lắp ráp thử nghiệm của bạn.

3

Tôi thường Mock tài nguyên bên ngoài như tệp và kết quả cơ sở dữ liệu thay vì cố gắng truy cập chúng trong các bài kiểm tra đơn vị của tôi. Nó không phải luôn luôn dễ dàng để làm. Có thể nếu bạn chỉ cho chúng tôi phương pháp được đề cập, chúng tôi có thể giúp bạn làm cho đơn vị đó dễ kiểm tra hơn.

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