2013-06-06 21 views
15

Tôi có ứng dụng giao diện điều khiển C#. Một trong những chức năng của nó đọc appconfig giá trị và làm một số công việc.không thể đọc các ứng dụng khi kiểm tra đơn vị

string host = ConfigurationManager.AppSettings["Host"] 

Vì vậy, tôi đã viết NUNIT thử nghiệm cho các ứng dụng giao diện điều khiển của tôi. Dự án thử nghiệm đơn vị đã được tạo bằng cách sử dụng thư viện lớp.

Nhưng thử nghiệm đơn vị của tôi hiện không thành công. Bởi vì nó không đọc cài đặt ứng dụng của tôi (cho biết không có cài đặt ứng dụng). Lý do cho điều này là gì.
Khi tôi chạy ứng dụng bảng điều khiển, ứng dụng này đang đọc chính xác cài đặt ứng dụng.

Trả lời

29

Bạn nên tạo một app.config cho dự án thử nghiệm đơn vị của mình. Ứng dụng app.config của ứng dụng giao diện điều khiển của bạn sẽ không được tư vấn khi bạn chạy thử nghiệm đơn vị.

+3

Điều đó có nghĩa tôi phải bổ sung sau đây để dự án thử nghiệm của tôi là tốt. ' ' –

+0

Có bạn đang đúng – aquaraga

+0

Hoạt động của nó. Không bao giờ biết điều đó. Cảm ơn sự giúp đỡ –

11

Trong khi bạn có thể xác định cài đặt ứng dụng trong tệp cấu hình khác cho dự án thử nghiệm đơn vị của bạn, kiểm tra đơn vị với giao diện bằng cách sử dụng tiêm phụ thuộc có thể giúp phân tích các khu vực mà thử nghiệm đơn vị của bạn sẽ bao gồm các phần dễ quản lý hơn.

Vì vậy, bạn có thể có giao diện cấu hình của bạn như:

public interface IConfiguration 
{ 
    public string Host { get; set; } 
} 

lớp học của bạn để kiểm tra sẽ chấp nhận một lớp IConfiguration như một tham số (thường là để xây dựng của bạn) như thế này:

public class MyClass 
{ 
    IConfiguration _config; 
    public MyClass(IConfiguration config) 
    { 
     _config = config; 
    } 

    public void MyMethodToTest() 
    { 
    } 
} 

Sau đó bạn kiểm tra có thể sử dụng giao diện để chuyển cấu hình thay vì tùy thuộc vào tệp cấu hình bên ngoài có khả năng thay đổi và ảnh hưởng đến thử nghiệm đơn vị của bạn:

[Test] 
public void Testing_MyMethodToTest() 
{ 
    // arrange 
    var config = new Configuration { Host = "My Test Host" }; 
    // act 
    new MyClass(config).MyMethodToTest(); 
    // Add assertion for unit test 
} 

Và thực hiện thực tế của bạn sẽ tạo ra lớp cấu hình của bạn, tải nó với giá trị (s) từ appSettings và vượt qua đó vào thực hiện của bạn

+0

Nhưng việc triển khai của anh ấy vẫn cần tải trong cấu hình của anh ấy từ cài đặt ứng dụng trong dự án thử nghiệm. –

+0

Đã thêm ví dụ về cách bạn viết một bài kiểm tra không cần cài đặt ứng dụng – boniestlawyer

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