IMHO, Rhino Mocks đưa ra thông báo chẩn đoán không rõ ràng khi AssertWasCalled được sử dụng để xác minh rằng phương thức đã được gọi với đối số cụ thể.Rhino Mocks - AssertWasCalled: Cách cải thiện thông báo chẩn đoán không rõ ràng khi đối số không chính xác
Ví dụ:
interface ISomeInterface
{
void Write(string s);
}
[TestFixture]
public class SomeTests
{
[Test]
public void WriteShouldBeCalledWithCorrectArguments()
{
// Arrange
var mock = MockRepository.GenerateMock<ISomeInterface>();
var sut = new SomeClass(mock);
// Act
sut.DoSomething();
// Assert
mock.AssertWasCalled(x => x.Write(Arg<string>.Is.Equal("hello")));
}
}
Bây giờ, nếu thử nghiệm không thành công với bài này ...
Rhino.Mocks.Exceptions.ExpectationViolationException: ISomeInterface.Write (tương đương với chào); Dự kiến # 1, Thực tế # 0.
... bạn không thể biết nếu nó không thành công vì
A. 'Viết' không bao giờ được gọi -hoặc-
B. 'Viết' được trong thực tế gọi nhưng với những lập luận không chính xác
Nếu B sẽ là nguyên nhân của sự thất bại thì nó sẽ rõ ràng hơn nhiều nếu thông điệp sẽ đọc một cái gì đó như thế này:
Rhino.Mocks.Exceptions.ExpectationViolationException: ISomeInterface.Write (string arg): Phương thức được gọi nhưng với argumen không chính xác ts: Dự kiến: hello, Thực tế: bye
Tôi có thể tự sửa lỗi này (bằng cách viết đối sánh tùy chỉnh cho Rhino theo cách nào đó) hay đơn giản là tôi phải viết mô hình thủ công cho điều này?
Cân nhắc thử Moq và/hoặc thực hiện kiểm tra dựa trên trạng thái. http://code.google.com/p/moq/ – TrueWill
Thật không may, Moq có cùng một vấn đề. – Chris