2010-02-18 18 views
6

Tôi đang sử dụng thuộc tính NUnit 2.5.3 TestCaseSource và tạo một nhà máy để tạo thử nghiệm của mình. Một cái gì đó như thế này:NUnit TestCaseGiá trị truyền qua nguồn cho nhà máy

[Test, TestCaseSource(typeof(TestCaseFactories), "VariableString")] 
public void Does_Pass_Standard_Description_Tests(string text) 
{ 
    Item obj = new Item(); 
    obj.Description = text; 
} 

nguồn của tôi là thế này:

public static IEnumerable<TestCaseData> VariableString 
{ 
    get 
    { 
     yield return new TestCaseData(string.Empty).Throws(typeof(PreconditionException)) 
      .SetName("Does_Reject_Empty_Text"); 
     yield return new TestCaseData(null).Throws(typeof(PreconditionException)) 
      .SetName("Does_Reject_Null_Text"); 
     yield return new TestCaseData(" ").Throws(typeof(PreconditionException)) 
      .SetName("Does_Reject_Whitespace_Text"); 
    } 
} 

Những gì tôi cần để có thể làm là để thêm một tấm séc chiều dài tối đa đến chuỗi biến, nhưng chiều dài tối đa này được định nghĩa trong các hợp đồng trong lớp đang được kiểm tra. Trong trường hợp của chúng tôi, cấu trúc công khai đơn giản của nó là:

public struct ItemLengths 
    { 
     public const int Description = 255; 
    } 

Tôi không thể tìm được cách chuyển giá trị cho trình tạo trường hợp thử nghiệm. Tôi đã thử các giá trị chia sẻ tĩnh và chúng không được chọn. Tôi không muốn lưu nội dung vào một tệp, vì vậy tôi cần phải tạo lại tệp này mỗi lần mã thay đổi.

Tôi muốn thêm dòng sau vào testcase của tôi:

yield return new TestCaseData(new string('A', MAX_LENGTH_HERE + 1)) 
    .Throws(typeof(PreconditionException)); 

Something khá đơn giản về khái niệm, nhưng điều mà tôi đang tìm kiếm không thể làm. Bất kỳ đề xuất?

Trả lời

2

Thay đổi tham số của bài kiểm tra của bạn thành lớp thay vì chuỗi. Giống như vậy:

lớp công khai StringTest { chuỗi công khai testString; tần số công khai tối đa; }

Sau đó, xây dựng lớp này để chuyển làm đối số cho hàm tạo TestCaseData. Bằng cách đó bạn có thể vượt qua chuỗi và bất kỳ đối số nào khác mà bạn thích.

Một tùy chọn khác là làm cho thử nghiệm có 2 đối số của chuỗi và int.

Sau đó cho TestCaseData ("mystring", 255). Bạn có nhận ra rằng họ có thể có nhiều đối số không?

Wayne

1

tôi phải đối mặt với một vấn đề tương tự như của bạn và kết thúc viết một addin NUnit nhỏ và một thuộc tính tùy chỉnh mà mở rộng NUnit TestCaseSourceAttribute. Trong trường hợp cụ thể của tôi, tôi không quan tâm đến việc truyền tham số cho phương thức nhà máy nhưng bạn có thể dễ dàng sử dụng cùng một kỹ thuật để đạt được những gì bạn muốn.

Nó không phải là tất cả những gì khó khăn và chỉ yêu cầu tôi viết một cái gì đó giống như ba lớp học nhỏ. Bạn có thể đọc thêm về giải pháp của tôi tại: blackbox testing with nunit using a custom testcasesource.

PS. Để sử dụng kỹ thuật này, bạn phải sử dụng NUnit 2.5 (ít nhất) Chúc may mắn.

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