2014-11-14 13 views
5

Tôi cố gắng để sử dụng TestCaseSource trong NUnit để chạy nhiều thử nghiệm với một trong các thông số là một mảngtên hiển thị TestCase trong NUnit khi sử dụng Mảng hoặc Generics

private static readonly object[] ReturnChopCases = 
    { 
     new TestCaseData(3, new List<int> {}).Returns(-1), 
     new TestCaseData(3, new List<int> {1}).Returns(1), 
     new TestCaseData(1, new List<int> {1,2}).Returns(1), 
    }; 

    [TestCaseSource("ReturnChopCases")] 
    public int test_chop(int SearchNumber, int[] SearchArray) 
    { 
     return Chopper.Chop(3, SearchArray); 
    } 

Vấn đề là tên hiển thị trong runner thử nghiệm (Tôi đang sử dụng bộ điều hợp thử nghiệm NUnit) khá vô dụng, tất cả đều hiển thị là test_chop(0,System.Int32[]) hoặc nếu sử dụng List thì test_chop(0,System.Collections.Generic.List`1[System.Int32]).

Làm cách nào để giữ lại kiểm tra khá dễ đọc và cung cấp tên thử nghiệm hữu ích cho thử nghiệm trong nhân tố thử nghiệm? Tôi đã thử một vài điều nhưng tôi vẫn nhận được tên được đề cập ở trên.

+2

Bạn chỉ có thể đặt tên cho các thử nghiệm một cách rõ ràng nếu bạn lưu vào '.SetName (" tên của bạn ")'. Bạn có thể đang tìm kiếm một cái gì đó tự động hơn mặc dù. –

+0

Có, tôi đã thực sự ngạc nhiên khi nó không làm điều gì đó tốt hơn với mảng đặc biệt. '.SetName (" ")' trông giống như lựa chọn tốt nhất hoặc tôi có thể viết một phương thức để truyền vào một tên cho các bài kiểm tra này. –

Trả lời

2

Sử dụng SetName chức năng đặt tên cho thử nghiệm

new TestCaseData(3, new List<int> {}).Returns(-1).SetName("test_chop_List<int>"), 
+0

Mặc dù tôi muốn có một giải pháp tốt hơn này trông giống như nó, cảm ơn :) –

1

Đây là giải pháp tôi đã đi với, đầu tiên tôi tạo ra một lớp đối với trường hợp kiểm tra tùy chỉnh của tôi

public class CustomTestCase 
{ 
    public CustomTestCase(int SearchNumber, List<int> List, int Result) 
    { 
     searchNumber = SearchNumber; 
     list = List; 
     result = Result; 
    } 
    private int searchNumber; 
    private List<int> list; 
    private int result; 

    public string TestName() 
    { 
     return string.Format("TestChop({0},{{{1}}})", searchNumber, String.Join(",", list)); 
    } 

    public TestCaseData SimpleTest() 
    { 
     return new TestCaseData(searchNumber, list).Returns(result).SetName(this.TestName()); 
    } 
} 

Và sau đó tôi sử dụng mà để xây dựng TestCaseSource

private static IEnumerable ReturnChopCases() 
{ 
    List<int> emptyList = new List<int> { }; 
    yield return new CustomTestCase(3,emptyList,-1).SimpleTest(); 

    List<int> singleItemList = new List<int> { 1 }; 
    yield return new CustomTestCase(3, singleItemList, 1).SimpleTest(); 
    yield return new CustomTestCase(3, singleItemList, 1).SimpleTest(); 
} 

Thử nghiệm là như nhau. Tôi vẫn nghĩ NUnit nên tạo ra nhiều tên hữu ích hơn nhưng tôi thấy đây là cách dễ nhất để giải quyết vấn đề của tôi và nếu tôi muốn giải quyết ngoại lệ, tôi có thể tạo một phương thức khác để xử lý chúng.

NB: Đừng quên bao gồm using System.Collections;using System.Collections.Generic;.

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