2012-04-24 24 views
7

Tôi đang sử dụng NUnit. Tôi đã xác định phương pháp thử nghiệm của mình là thích:NUnit. Chuyển thông số vào phương pháp teardown

[Test] 
[TestCase("Fred", "Bloggs")] 
[TestCase("Joe", "Smith")] 
public void MyUnitTest(string firstName, string lastName) 
{ 
    ... 
} 

Sau khi TestCase kết thúc, nó đi vào Phương pháp TearDown. Điều gì muốn làm là có các tham số TestCase được chuyển vào phương thức thử nghiệm mà còn được chuyển vào phương thức TearDown.

Something như thế này:

[TearDown] 
public void TearDown(string firstName, string lastName) 
{ 
    ... 
} 

Tôi hy vọng rằng NUnit hỗ trợ này out-of-the-box. Nếu không, tôi cần viết mã riêng biệt trong phương pháp thử để lưu trữ dữ liệu thử nghiệm trong một bộ sưu tập. Sau đó, bộ sưu tập được sử dụng trong phương pháp TearDown.

Nếu có ai có bất kỳ suy nghĩ nào .. sẽ tuyệt vời! Cảm ơn. Christian

Trả lời

9

TearDown và SetUp được thực hiện cho từng thử nghiệm của bạn trong lịch thi đấu. Hãy xem xét bạn có các xét nghiệm sau:

[TestCase("Joe", "Smith")] 
public void Test1(string firstName, string lastName) { ... } 

[Test] 
public void Test2() { ... } 

[TestCase(10)] 
public void Test3(int value) { ... } 

Chữ ký mong đợi của phương pháp TearDown là gì?

Vì vậy, câu trả lời là không. NUnit không cung cấp cách mặc định truyền tham số thử nghiệm cho phương thức TearDown. Và tôi nghĩ là không. Bạn cần thêm chức năng này theo cách thủ công.

+0

Tôi nghĩ rằng NUnit không hỗ trợ nó sau nhiều lần Googling. Nhưng cảm ơn câu trả lời của bạn. Luôn kiểm tra tốt. –

4

Thực ra, điều này là có thể.

Nếu bạn tham chiếu TestContext.CurrentContext.Test.Name trong TearDown, bạn có thể nhận được chữ ký phương thức đầy đủ chứa các tham số được truyền vào nó. Bạn sẽ phải phân tích nó, nhưng nó ở đó.

2

Có thể tham chiếu các tham số cho Kiểm tra trực tiếp từ TestContext trong chức năng TearDown.

Điều gì đó tương tự.

[Test] 
[TestCase("Fred", "Bloggs")] 
[TestCase("Joe", "Smith")] 
public void MyUnitTest(string firstName, string lastName) 
{ 
} 

[TearDown] 
public void TearDown() 
{ 
    string firstName = TestContext.CurrentContext.Test.Arguments[0] as string; 
    string lastName = TestContext.CurrentContext.Test.Arguments[1] as string; 
} 

Cần lưu ý rằng TestContext.CurrentContext.Test.Arguments chỉ là một mảng đối tượng và sẽ được gọi cho tất cả các thử nghiệm trong TestFixture không phụ thuộc vào chữ ký cá nhân nên chúng ta phải cẩn thận để đảm bảo chúng ta đối phó với tất cả các giá trị có thể trong Arguments[] nhưng chắc chắn có thể tham chiếu các đối tượng này trong hàm TearDown

+0

+1. ** Lưu ý: ** _if ai đó sẽ sử dụng phương pháp trả lời, phiên bản NUnit phải được check_ - mảng 'Đối số' có sẵn kể từ [v3.7] (https://github.com/nunit/nunit/pull/2096), – Serg

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