2011-10-25 12 views
5

Khi làm việc với Rhino.Mocks với một đối tượng giả trong tay:Làm thế nào tôi có thể vượt qua bài kiểm tra đơn vị ngay lập tức sau khi một phương pháp dự kiến ​​được gọi trên đối tượng giả?

Có cách nào để vượt qua bài kiểm tra đơn vị khi phương pháp dự kiến ​​được gọi mà không thực hiện các dòng sau khi gọi đến phương thức dự kiến ​​này không?

Cảm ơn

+0

Vì vậy, bạn muốn giả lập có thể báo hiệu rằng thử nghiệm đã hoàn tất? – rerun

+0

Có; lý do là nếu tôi không 'arrrange' một vài đối tượng được chạm sau khi gọi phương thức này, tôi có một ngoại lệ. Và tôi không tìm thấy nó có ý nghĩa để mở rộng thử nghiệm của tôi chỉ để ngăn chặn một ngoại lệ trong khi tôi đang convinved rằng thử nghiệm được thông qua bằng cách gọi phương pháp dự kiến ​​đó. – pencilCake

+5

Tôi nghĩ bạn nên sửa thiết kế của mình hơn là làm xáo trộn dòng chảy thực hiện của các bài kiểm tra của bạn. Nếu không biết thêm chi tiết thì thật khó để nói vấn đề là gì, nhưng có vẻ như bạn có một phương pháp làm nhiều thứ (thứ bạn đang thử nghiệm cộng với thứ bạn muốn bỏ qua), vi phạm nguyên tắc trách nhiệm duy nhất. – hammar

Trả lời

2

Kể từ RhinoMocks 3.5 bạn có thể sử dụng thoải mái AssertWasCalled()

this.Service.BuldMessage("messageId"); 
this.Service.AssertWasCalled(x => x.GenerateMessage("messageId"), messageId)); 

EDIT: trả lời bình luận

Rhino Mock không chịu trách nhiệm thay đổi dòng chảy thực hiện kiểm tra, vì vậy bạn phải sử dụng NUnit khẳng định, phương pháp Assert.Pass() tiện ích cho phép bạn ngay lập tức chấm dứt cuộc kiểm tra, ghi nó như là thành công:

if (this.Service.AssertWasCalled(...))) 
{ 
    Assert.Pass("well done"); 
} 

PS: như những người khác đề nghị xem xét redesing của bài kiểm tra đơn vị đã buộc bạn phải làm lối ra kiểm tra có điều kiện như vậy.

+0

Tôi biết điều này. Nhưng những gì tôi có nghĩa là: Một khi nó được gọi là, STOP thực hiện phương pháp bởi vì các thử nghiệm đã được thông qua như mong đợi điều xảy ra. – pencilCake

+0

@pencilCake: Tôi đã cập nhật câu trả lời của mình – sll

2

Bạn có thể sử dụng AssertWasCalled() trong Rhino.Mocks

kỳ vọng của bạn là thử nghiệm nên dừng lại nếu phương pháp này được gọi và không nên chạy các dòng sau có nghĩa là bạn đã viết bài kiểm tra sai. Có khẳng định (Nunit hoặc cách khác) là dòng cuối cùng của bài thi và chia bài kiểm tra. Có thể bạn đang thử nghiệm hai thứ và đó không phải là thử nghiệm đơn vị. Không có loại phân nhánh như vậy trong các thử nghiệm. Tất cả các dòng trong các thử nghiệm nên được thực hiện. Và lý tưởng, mọi thử nghiệm chỉ nên có một khẳng định.

Với loại luồng bạn đang mong đợi, bạn sẽ mất phản hồi bạn nhận được từ các thử nghiệm khi chúng không thành công. Bạn không biết, chỉ cần nhìn vào tên thử nghiệm, những gì không thành công.