2013-07-23 26 views
9

Tôi có một phương pháp thử nghiệm lấy hai tệp XML làm đầu vào và so sánh chúng. Tôi đang sử dụng khuôn khổ Microsoft.VisualStudio.TestTools.UnitTesting trên .NET 4.5. Tôi muốn sửa đổi phương pháp thử nghiệm như vậy mà phải mất nhiều tập tin XML (hai tại một thời điểm trong cặp), chạy thử nghiệm và cung cấp cho các kết quả một cách riêng biệt.Thử nghiệm điều khiển dữ liệu trong C# sử dụng mảng

Tôi đã thử mã sau đây nhưng nó chỉ cung cấp một đầu ra duy nhất và dừng lại khi bất kỳ cặp tệp đầu vào nào không kiểm tra.

string[] source = {file1, file2, file3, file4....}; 
string[] target = {fileA, fileB, fileC, fileD....}; 

[Test Method] 
public void TestCase01() 
{ 
     TestLogic testObj = new TestLogic(); //class containing the comparison method 
     for (int i = 0; i < source.Length; i++) 
     { 
      Assert.IsTrue (testObj.VerifyFiles(source[i], target[i])); 
     } 
} 

Khi thực hiện một số nghiên cứu, tôi có thể sử dụng thuộc tính DataSource. Nhưng tôi không biết làm thế nào để vượt qua hai mảng (hoặc một mảng hai chiều) đến thuộc tính DataSource. Tôi muốn sử dụng Microsoft.VisualStudio.TestTools.UnitTesting để thử nghiệm và các khung bên thứ 3 khác như NUnit chỉ là phương sách cuối cùng.

Chỉnh sửa: Tôi không biết số lượng tệp đầu vào. Tôi đã sử dụng 4 tệp như một ví dụ. Trước khi chuyển các tập tin vào TestMethod, tôi ghép chúng với các ID của chúng. Vì vậy, lần đầu tiên tôi đọc hai tập hợp các tệp từ hai thư mục khác nhau, ghép nối chúng dựa trên ID của chúng và sau đó chuyển các tệp được ghép nối đến trường hợp thử nghiệm để kiểm tra. Cách tôi đang làm nó bây giờ là tôi lưu các tên tập tin được ghép nối (nguồn và đích) trong một mảng hoặc danh sách và sau đó chuyển chúng vào trường hợp thử nghiệm. Rõ ràng phương pháp này không hoạt động và tôi đang gặp vấn đề như đã đề cập ở trên.

Trả lời

0

Chỉ đơn giản là equate có thể làm việc Datasource instance = Array. Hàng nguồn dữ liệu trong giá trị vòng lặp và hàng dưới dạng mảng.

+5

Bạn có thể giải thích một chút không? Có thể cung cấp cho một số mã demo cho nó. – Vijay

7

Bạn có thể sử dụng làm DataSource tệp csv sẽ có cột kéo (một cho nguồn và một cho mục tiêu). Sau đó, trong thử nghiệm của bạn sử dụng nó như sau:

[TestClass] 
public class TestCase 
{ 
    [TestMethod] 
    [DataSource("Microsoft.VisualStudio.TestTools.DataSource.CSV", "files.csv", "files#csv", DataAccessMethod.Sequential)] 
    public void TestCase() 
    { 
     TestLogic testObj = new TestLogic(); 

     string source = (string) TestContext.DataRow["source"]; // get the value from the 'source' column 
     string target = (string) TestContext.DataRow["target"]; // get the value from the 'target' column 

     Assert.IsTrue(testObj.VerifyFiles(source, target)); 
    } 

    public TestContext TestContext{ get; set; } 
} 

Thử nghiệm sẽ lặp qua các hàng của DataSource và sẽ chạy một lần cho mỗi hàng.

Kiểm tra here để biết thêm chi tiết.

+1

Chỉ cần đảm bảo rằng tệp .csv được chọn vào nguồn ... –

+0

Vì vậy, với phương pháp này, tôi sẽ phải đọc các tệp từ hai thư mục, ghép nối chúng trên cơ sở ID của chúng và sau đó lưu tên tệp được ghép nối trong tệp CSV Tôi đọc bằng trường hợp thử nghiệm. Có phương pháp trực tiếp nào hơn để làm điều đó không? Giống như trực tiếp truyền mảng vào DataSource? – Vijay

+0

Trong câu hỏi của bạn, bạn đã không đề cập đến bất cứ điều gì về gọt. Họ dường như đã được ghép nối. Chỉ mảng của chuỗi (tôi đề nghị các đường dẫn), vì vậy giải pháp của tôi là đặt các mảng (các đường dẫn ghép nối) trong một scv và đọc chúng từ đó. Bằng cách đó bạn không cần phải lặp lại trường hợp thử nghiệm và thêm nhiều đường dẫn được ghép nối mà không thay đổi mã. Nếu bạn có thêm chức năng trong bài kiểm tra, hãy chỉnh sửa câu hỏi của bạn. – Schaliasos

2

Tôi đã có một vấn đề tương tự và vào cuối theo khuyến cáo từ this blog post,

Chúng tôi đã sử dụng một loạt các loại Anonymous để lưu trữ bộ của chúng ta về điều kiện, và sau đó sử dụng phương pháp LINQ của foreach() để lặp thông qua mảng và chạy thử nghiệm cho từng phần tử.

+0

Điều đó trông giống như giải pháp ban đầu của OP mà anh ấy đang cố gắng tránh, ví dụ: "nó chỉ cho một đầu ra duy nhất và dừng lại khi bất kỳ cặp tệp đầu vào nào bị lỗi" –

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