2008-09-04 32 views
5

Tôi muốn có thể thêm một "thông báo" vào một bài kiểm tra đơn vị, sao cho nó thực sự xuất hiện trong tệp TestResult.xml được tạo bởi NUnit. Ví dụ, điều này hiện đang được tạo ra:Thêm thông tin khác vào tệp TestResult.xml từ NUnit

<results> 
    <test-case name="MyNamespace.Tests.MyTest" executed="True" success="True" time="0.203" asserts="4" /> 
</results> 

Tôi muốn để có thể có thêm thuộc tính (hoặc nút tuỳ từng trường hợp có thể được), chẳng hạn như:

<results> 
    <test-case name="MyNamespace.Tests.MyTest" executed="True" success="True" time="0.203" asserts="4" message="Tested that some condition was met." /> 
</results> 

Ý tưởng là "thông điệp" ở trên bằng cách nào đó sẽ được xác định trong chính phương pháp thử nghiệm (trong trường hợp của tôi, được tạo ra tại thời gian chạy). Có một tài sản ở đâu đó mà tôi đang thiếu để có thể làm một cái gì đó như thế này?

Trả lời

2

Điều này có thể thiếu điểm, nhưng cách đặt tên cho các bài kiểm tra để chúng cho biết những gì họ kiểm tra - sau đó bạn thậm chí có thể không cần thông báo.

Nếu nó chứng minh là hoàn toàn cần thiết, tôi nghĩ bạn sẽ cần phải tạo ra trình thử nghiệm của riêng bạn (ngoài đỉnh đầu của tôi) đọc thuộc tính bổ sung ngoài TestCase và đính kèm nó vào đầu ra.

+0

Bạn xác nhận rằng tôi cần phải thực hiện một số phép thuật phản chiếu và tự động tạo và đặt tên cho các bài kiểm tra trong thời gian chạy hoặc tôi phải tạo một người chạy thử nghiệm tùy chỉnh. –

+0

Bạn không hoàn toàn không có cơ sở. Tuy nhiên, các điều kiện đang được thử nghiệm mà tôi muốn thêm vào TestResult.xml thường không được biết cho đến khi chạy. Ngay bây giờ tôi chỉ đơn giản là Console.WriteLine chúng. Các xét nghiệm này có lẽ được gọi là "người chạy thử nghiệm" hơn, nơi chỉ có một số giá trị trạng thái kết thúc thực sự được khẳng định. Tôi giả sử dọc theo những dòng này tôi có thể tự động tạo ra và đặt tên cho các phương pháp thử nghiệm này bằng cách sử dụng sự phản chiếu, nhưng tôi nghĩ rằng đó là bắt đầu đi overboard.:-) Tôi sẽ tiếp tục điều tra việc tạo ra một TestRunner trong thời gian chờ đợi. –

0

Tôi không thể xem bất kỳ nội dung nào có sẵn trong thời gian chạy, nhưng có một số tính năng mà bạn có thể muốn điều tra: thuộc tính Description và thuộc tính Property cả hai đều thêm văn bản vào tệp đầu ra XML. Thật không may, cả hai đều được định nghĩa tại thời gian biên dịch.

5

Trong NUnit gần đây phát hành bạn có thể làm:

Assert.AreEqual(250.00, destination.Balance, "some message here"); 

đâu "Một số lời nhắn ở đây" có thể là một thông điệp không đổi hoặc nhắn được tạo ra trong thời gian chạy và lưu trữ trong một biến chuỗi. Các thông báo này sẽ chỉ xuất hiện trong đầu ra tuy nhiên nếu xác nhận không thành công. Tuy nhiên, thông thường, bạn chỉ cần thông tin về các kiểm tra không thành công nên tôi khuyên bạn nên xây dựng một chuỗi bằng cách thêm từng thông báo trước và sau đó sử dụng biến chuỗi đó làm thông báo trong tất cả các xác nhận của bạn. Điều này cho phép bạn nhận được tất cả thông tin bạn cần từ việc không kiểm tra.

+0

Tuyệt vời đó là chính xác những gì tôi đang tìm kiếm! –

0

Bạn có thể sử dụng TestContext để dễ dàng viết ra bất kỳ thư nào bạn muốn. Đây là cách tôi thiết lập.

Mỗi thử nghiệm của tôi được kế thừa từ lớp cơ sở thử nghiệm. Điều này loại bỏ mã dự phòng.

[TestFixture] 
public class TestBase 
{ 

    public IWebDriver driver; 

    //[OneTimeSetUp] and [OneTimeTearDown] go here if needed 

    [SetUp] 
    public void Setup(){ 
     driver = Shortcuts.SetDriver("my browser"); 
    } 

    [TearDown] 
    public void TearDown() 
    { 
     driver.Quit(); 
     Comment("@Result: " + TestContext.CurrentContext.Result.Outcome.ToString()); 
    } 

    public void Comment(string _comment) 
    { 
     TestContext.Out.WriteLine(_comment); 
    } 
    public void Error(string _error) 
    { 
     TestContext.Error.WriteLine(_error); 
    } 

} 

Bạn có thể thấy hai hàm dưới cùng viết ra bất kỳ thông báo hoặc lỗi nào trong TestContext đã nói. Điều này sẽ làm việc độc đáo với các xét nghiệm tương tự.

Sau đó tôi có thể sử dụng lớp cha mẹ đó để thiết lập các thử nghiệm của mình và ghi vào bảng điều khiển của tôi.

//Role Management 
public class RoleManagementTests : TestBase 
{ 
    [TestCase] 
    public void RoleManagement_7777_1() 
    { 
     Comment("Expected: User has the ability to view all roles in the system."); 
     //Test goes here 
    } 
} 

Bây giờ bạn có thể xem kết quả ở đầu ra (Visual Studio) và trong TestResult.xml bằng NUnit Console Runner.

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