2015-05-18 16 views
5

Tôi có Phương pháp thử nghiệm đang gọi 2 Phương thức thử nghiệm phụ. Cả hai phương thức con là Data Driven từ một tệp XML. Nếu tôi chạy từng phương thức con, chúng chạy tốt và thành công. Tuy nhiên, khi tôi chạy phương pháp thử nghiệm chính (người gọi của cả hai phương pháp phụ) nó tìm thấy TestContext.DataConnection và TestContext.DataRow là null.Kiểm tra đơn vị TestContext Nhiều cuộc gọi

private TestContext testContext; 
    public TestContext TestContext 
    { 
     get { return testContext; } 
     set { testContext = value; } 
    } 
    [TestMethod] 
    public void SaveEmpty_Json_LocalStorage() 
    { 
     // Testing JSON Type format export and save 
     SetWindowsUsers(); 
     // Add Network Information 
     SetWifiInformation(); 

     // More logic and assertions here. 
     // More logic and assertions here. 
     // More logic and assertions here. 
    } 

    [TestMethod] 
    [DeploymentItem("input.xml")] 
    [DataSource("Microsoft.VisualStudio.TestTools.DataSource.XML", 
       "input.xml", 
       "User", 
       DataAccessMethod.Sequential)] 
    public void SetWindowsUsers() 
    { 
     Console.WriteLine(TestContext.DataRow["UserName"].ToString()) 
     // MORE LOGIC and Asserts 
    } 

    [TestMethod] 
    [DeploymentItem("input.xml")] 
    [DataSource("Microsoft.VisualStudio.TestTools.DataSource.XML", 
       "input.xml", 
       "WifiList", 
       DataAccessMethod.Sequential)] 
    public void SetWifiInformation() 
    { 
     Console.WriteLine(TestContext.DataRow["SSID"].ToString()) 
     // MORE LOGIC and Asserts 
    } 

Nếu tôi chạy tất cả, 2 phương thức vượt qua và 1 lỗi. Nếu tôi chạy riêng lẻ, SaveData_Json_LocalStorage Không vượt qua, luôn luôn nhận được TestContext.DataRow là null. Có thể gọi nhiều phương thức bên trong không. Cách tốt nhất để viết các trường hợp kiểm tra xích.

+0

Tôi chưa bao giờ thực sự nhìn thấy thuộc tính 'DeploymentItem' và' DataSource', nhưng tôi chắc rằng chúng là nguồn gốc của vấn đề của bạn. Các thuộc tính không thực sự làm bất cứ điều gì một mình. Bạn cần khung kiểm thử đơn vị để làm điều gì đó với họ. (Thiết lập dữ liệu của bạn trong trường hợp này.) Khi bạn gọi 'SetWindowsUsers' và' SetWifiInformation' trực tiếp, thiết lập dựa trên thuộc tính đó không được thực hiện. –

+1

Nói chung, bạn nên tránh các trường hợp kiểm tra chuỗi. Tùy thuộc vào Test Runner để quyết định thứ tự thực hiện. Thay vào đó, hãy sử dụng phương pháp thiết lập chung cho các trường hợp thử nghiệm. – Henrik

+0

@JasonWatkins Khi tôi gọi SetWindowsUsers và SetWifiInformation trực tiếp, cả hai thuộc tính "DataSource" và DeploymentItems hoạt động tốt và tôi nhận được dữ liệu từ XML và kiểm tra vượt qua. Tôi không nhận được TestContext.DataRow của tôi là null. Hai thuộc tính này khá chuẩn và được sử dụng cho các trường hợp Kiểm tra theo dõi dữ liệu – rocky

Trả lời

2

Chỉ nên thực hiện chuỗi nếu cần phải có dữ liệu không thể tạo lại. Nếu không, hãy thực hiện từng bài kiểm tra một bài kiểm tra riêng biệt.

Chuyển dữ liệu từ tệp XML.

Cân nhắc đặt read-only Xml vào một tài sản được điều hành lần trước thét xét nghiệm trong phương pháp ClassInitialization. Sau đó kiểm tra các hoạt động riêng lẻ, tiếp theo là hoạt động "Chính", Mỗi hoạt động như một đơn vị có thể kiểm tra riêng biệt.

public static XDocument Xml { get; set; } 

[DeploymentItem("input.xml")] 
[DataSource("Microsoft.VisualStudio.TestTools.DataSource.XML", 
      "input.xml", 
      "User", 
      DataAccessMethod.Sequential)] 
[ClassInitialize()] 
public static void ClassInit(TestContext context) 
{ // This is done only once and used by other tests. 
    Xml = ... 
    Assert.IsTrue(Xml.Node ...); 
} 

Nếu không nhìn vào chế giễu các dữ liệu tùy thuộc vào thử nghiệm đang được thực hiện hoặc nếu nó xuất phát từ một cuộc gọi cụ thể, làm thế nào về một shim? Xem bài viết của tôi Shim Saves The Day in A Tricky Unit Test Situation.

+0

vấn đề với giải pháp này, tôi có hai bảng bên trong tệp XML của tôi. và mỗi phương pháp A và B sử dụng bảng riêng của nó. Kịch bản của tôi là Phương pháp A và B là các trường hợp thử nghiệm riêng biệt, tuy nhiên, phương thức chính cần A và B là điều kiện tiên quyết để chạy thêm logic. Nó cần dữ liệu từ cả bảng tệp XML. Nếu tôi tìm thấy một cách để tải dữ liệu từ nhiều bảng thì tôi sẽ loại bỏ cuộc gọi đến phương pháp chuỗi và ghi dữ liệu độc lập. – rocky

+0

@rocky Tôi sẽ xem xét việc tạo ra một giá trị shim hoặc 'mocked' duy nhất cho mỗi bài kiểm tra đơn vị. Xem bài viết của tôi [Shim Tiết kiệm Ngày trong Tình huống Thử nghiệm Đơn vị Tricky] (http://blogs.msdn.com/b/mvpawardprogram/archive/2012/09/04/shim-saves-the-day-in-a- tricky-unit-test-situation.aspx) – OmegaMan

+0

Cảm ơn. Tôi sẽ thử shim và chế nhạo. – rocky

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