2012-05-04 27 views
14

Nó không rõ ràng với tôi mục đích của as_null_object là gì và trong trường hợp nào bạn sẽ sử dụng nó? Theo tài liệu về Relish:RSpec - as_null_object?

sử dụng phương thức để bỏ qua bất kỳ thư nào không phải là số được đặt rõ ràng là thư hoặc kỳ vọng thư.

Không đăng ký với tôi.

Trả lời

12

Sử dụng đối tượng rỗng khi bạn không quan tâm đến hành vi hoặc tương tác của đối tượng và không muốn phân phát rõ ràng mọi thứ cần thiết. Việc gọi bất kỳ phương thức nào với bất kỳ đối số nào trên một đối tượng null sẽ không dẫn đến một số NoMethodError hoặc ArgumentError. Xem thêm mục nhập Wikipedia trên Null Object Pattern.

8

The RSpec Book giải thích điều này. Tôi khuyên bạn nên đọc nó.

... đối tượng as_null yêu cầu đối tượng được giả mạo chỉ nghe các tin nhắn mà chúng tôi yêu cầu cho số mong đợi và bỏ qua bất kỳ tin nhắn nào khác.

Vì vậy, giả sử một trong những ví dụ của bạn có đoạn mã sau:

... 
my_object = mock("my_object").as_null_object 
other_thing = OtherThing.new(my_object) 
my_object.should_receive(:some_method).with("string parameter value") 
... 

Nếu mã khởi tạo cho OtherThing gửi tin nhắn khác (thực hiện các phương pháp khác) để my_object mà không phải là "some_method", ví dụ này sẽ không lắng nghe họ, cô lập thử nghiệm cho những gì bạn thực sự muốn thử nghiệm ở đây.