2011-11-24 29 views
5

Rõ ràng không có assert_false trong Kiểm tra :: Đơn vị. Bạn sẽ thêm nó bằng cách mở rộng các xác nhận và thêm tệp config/initializers/assertions_helper.rb như thế nào?Làm thế nào để mở rộng Ruby Test :: Xác nhận đơn vị bao gồm assert_false?

Đây có phải là cách tốt nhất để làm điều đó không? Tôi không muốn sửa đổi test/unit/assertions.rb.

Nhân tiện, tôi không nghĩ nó là thừa. Tôi đã sử dụng assert_equal false, something_to_evaluate. Vấn đề với cách tiếp cận này là dễ dàng vô tình sử dụng assert false, something_to_evaluate. Điều này sẽ luôn luôn thất bại, không ném một lỗi hoặc cảnh báo, và mời lỗi vào các bài kiểm tra.

+1

@B Bảy, bạn đã thấy điều này [link] (http://www.natontesting.com/2009/07/21/add-assert_false-to-rubys-testunit/)? –

+0

Liên kết nào? .... –

+1

http://www.natontesting.com/2009/07/21/add-assert_false-to-rubys-testunit/, liên kết công việc là siêu liên kết nhưng nhìn thấy như trên. –

Trả lời

3

Chỉ cần thêm một tiếng nổ lớn ở phía trước của những gì bạn đang khẳng định:

assert !(something_false) 
9

Nếu bạn đang sử dụng MiniTest (thay thế Test :: Unit trong Ruby 1.9+), sau đó bạn có thể sử dụng phương pháp refute, mà là nghịch đảo của assert.

+0

Đây là câu trả lời đúng – joncodo

4

Cá nhân tôi thấy tên assert_false tốt hơn so với refute vì nó phù hợp với tất cả các khẳng định khác, và nó cũng thường phù hợp hơn với ngữ nghĩa (tương tự như sử dụng if !condition thay vì unless).

Nếu bạn cảm thấy như vậy và muốn assert_false, thêm nó vào test/test_helper.rb:

class ActiveSupport::TestCase 

    ... 

    def assert_false(test, message="Expected: false. Actual: #{test}.") 
    assert_equal false, test, message 
    end 

end 

EDIT: Lưu ý rằng assert !test (được đề xuất ở nơi khác) sẽ không hoạt động nếu test là con số không (con số không là sự thật, và chúng tôi có thể muốn assert_false(nil) không thành công). Đây là so sánh trực tiếp với false.

4

Rails 4 có assert_not làm những gì bạn muốn.

test "requires valid url" do 
    @mymodel.url = "bogus!" 
    assert_not @mymodel.valid? 
end 
Các vấn đề liên quan