2012-03-03 10 views
8

Tôi đã kiểm tra sau:Đi qua giá trị duy nhất để params luận trong NUnit TestCase

[ExpectedException(typeof(ParametersParseException))] 
[TestCase("param1")] 
[TestCase("param1", "param2")] 
[TestCase("param1", "param2", "param3", "optParam4", "optParam5", "some extra parameter")] 
public void Parse_InvalidParametersNumber_ThrowsException(params string[] args) 
{ 
    new ParametersParser(args).Parse(); 
} 

Các TestCase đầu tiên (rõ ràng) không thành công với các lỗi sau:

System.ArgumentException : Object of type 'System.String' 
cannot be converted to type 'System.String[]'. 

tôi đã cố gắng để thay thế TestCase định nghĩa với điều này:

[TestCase(new[] { param1 })] 

nhưng bây giờ tôi gặp lỗi biên dịch sau:

error CS0182: An attribute argument must be a constant expression, typeof expression or array creation expression of an attribute parameter type

Giải pháp của tôi bây giờ là chuyển trường hợp 'một thông số' sang một phương pháp thử khác.

Tuy nhiên, có cách nào để thử nghiệm này chạy giống như cách khác không?

Trả lời

8

Một cách có thể là sử dụng TestCaseSource và có phương thức trả về từng bộ thông số thay vì sử dụng TestCase.

3

Dựa trên this answer để đáp ứng với những câu hỏi 'NUnit cannot recognize a TestCase when it contains an array', các lỗi biên dịch bắt nguồn từ một bug, và có thể được khắc phục bằng cách sử dụng cú pháp cho trường hợp thử nghiệm được đặt tên, như vậy:

[ExpectedException(typeof(ParametersParseException))] 
[TestCase(new[] { "param1"}, TestName="SingleParam")] 
[TestCase(new[] { "param1", "param2"}, TestName="TwoParams")] 
[TestCase(new[] { "param1", "param2", "param3", "optParam4", "optParam5"}, "some extra parameter", TestName="SeveralParams")] 
public void Parse_InvalidParametersNumber_ThrowsException(params string[] args) 
{ 
    new ParametersParser(args).Parse(); 
} 
+0

Bạn liên kết đến một resharper vấn đề, trong khi vấn đề có vẻ là nunit ... trong mọi trường hợp, có vẻ như resharper giải quyết vấn đề – Noctis

+1

Làm điều này với 'new [] {...}' trong đó mảng là của chuỗi cung cấp cho lỗi CS0182 như được tham chiếu bởi OP ở trên. Các kiểu số nguyên dường như hoạt động bình thường. – Brandon