2016-04-07 13 views
7

Tôi hiện đang viết lại một số bài kiểm tra đơn vị để sử dụng NUnit 3 thay vì NUnit 2 và cần phải thay đổi một số xác nhận để khẳng định dựa trên các nguyên tắc. Tôi có khẳng định như sau:Tăng khả năng đọc để khẳng định IsNotNullOrEmpty với các xác nhận dựa trên ràng buộc

Assert.IsNullOrEmpty(result); 

Rằng tôi đã thay đổi để:

Assert.That(result, Is.Null.Or.Empty); 

Tuy nhiên, tôi không hoàn toàn hài lòng với khả năng đọc khi khẳng định IsNotNullOrEmpty:

Assert.That(result, Is.Not.Null.And.Not.Empty); 

My đề xuất hiện tại là tạo lớp tĩnh sau:

public static class Text 
{ 
    public static EmptyConstraint IsNullOrEmpty => Is.Null.Or.Empty; 

    public static EmptyConstraint IsNotNullOrEmpty => Is.Not.Null.And.Not.Empty; 
} 

Cách sử dụng:

Assert.That(result, Text.IsNotNullOrEmpty); 

này cung cấp khả năng đọc tốt hơn tại các chi phí của việc giới thiệu một hạn chế tùy chỉnh. Có cách nào tiêu chuẩn để thực hiện cùng một xác nhận hay tôi nên tiếp tục sử dụng Is.Not.Null.And.Not.Empty thay thế?

+0

Câu hỏi này có thể được trả lời khách quan. Đã chỉnh sửa nội dung để đặt câu hỏi theo các thuật ngữ không chủ quan; bỏ phiếu để mở lại. – dasblinkenlight

Trả lời

7

Xác nhận của bạn cho Is.Null.Or.Empty đọc hoàn toàn tốt mà không có lớp học Test. Hơn nữa, khi xác nhận này không thành công, bạn biết chính xác điều gì đã xảy ra: bạn có đối tượng string hợp lệ không trống.

Các vấn đề tôi thấy với phiên bản phủ định "DeMorgan-ized", tức là Is.Not.Null.And.Not.Empty, là quá dài và không đọc gần như độc đáo như Is.Null.Or.Empty.

Tuy nhiên, thay vì thực hiện một chế riêng cho nó, tôi xin khẳng định bộ phận của nó riêng biệt, tức là

Assert.That(result, Is.Not.Null); 
Assert.That(result, Is.Not.Empty); 

Lý do tôi sẽ làm điều đó như thế là hai điều kiện thất bại không chồng chéo, tức là result có thể là null hoặc nó có thể trống, nhưng không thể là cả hai cùng một lúc. Một xác nhận hợp chất duy nhất không phân biệt được giữa hai tình huống này, vì vậy bạn sẽ tìm một trình gỡ rối để xem liệu result có phải là null hoặc trống không.

Các xác nhận riêng biệt, mặt khác, cho bạn biết chính xác điều gì xảy ra trong khi vẫn rất dễ đọc. Họ "chi phí" cho bạn thêm một dòng cho mỗi xác nhận; Tôi nghĩ đây là một chi phí hợp lý để có được thông tin chính xác hơn về những thất bại tiềm năng.

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