ИМХО, 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.
... вы не можете знать, если это не удается, потому что
A. «Write» никогда не вызывается -или-
B. «Write» фактически вызывается, но с неверным аргументом
Если бы B был причиной сбоя, тогда было бы намного яснее, если бы сообщение читалось примерно так:
Rhino.Mocks.Exceptions.ExpectationViolationException: ISomeInterface.Write (string arg): метод был вызван, но с неверными аргументами: ожидается: привет, факт: пока
Могу ли я сам исправить этот недостаток (каким-то образом написав собственные совпадения для Rhino) или мне просто нужно написать ручной макет для этого?