IMHO, Rhino Mocks создает нечеткое диагностическое сообщение, когда AssertWasCalled используется для проверки того, что метод был вызван с определенным аргументом.
Пример:
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")));
}
}
Теперь, если тест завершился с этим сообщением...
Rhino.Mocks.Exceptions.ExpectationViolationException: ISomeInterface.Write(равно hello); Ожидаемое # 1, фактическое # 0.
... вы не можете знать, не сработает ли он, потому что
а. "Запись" никогда не вызывается - или -
B. 'Write' на самом деле вызывается, но с неправильным аргументом
Если бы B был причиной сбоя, тогда было бы намного яснее, если бы сообщение прочитало что-то вроде этого:
Rhino.Mocks.Exceptions.ExpectationViolationException: ISomeInterface.Write(string arg): был вызван метод, но с неправильными аргументами: Ожидаемое: привет, Actual: bye
Могу ли я исправить этот недостаток самостоятельно (путем написания пользовательских совпадений для Rhino в некотором роде), или просто мне нужно написать макет руководства для этого?