Возможно, это связано с версией RhinoMocks, которую вы используете? Я использую RhinoMocks версии 3.5.0.1337, и Like корректно определяет длину.
public interface IFoo
{
void Write(string value);
}
public class Bar
{
private readonly IFoo _foo;
public Bar(IFoo foo)
{
_foo = foo;
}
public void Save(string value)
{
_foo.Write(value);
}
}
Тесты
private Bar _bar;
private IFoo _foo;
[SetUp]
public void BeforeEachTest()
{
var mocker = new RhinoAutoMocker<Bar>();
_bar = mocker.ClassUnderTest;
_foo = mocker.Get<IFoo>();
}
[Test]
public void Given_input_length_equal_to_that_required_by_Like()
{
CallSave("".PadLeft(512));
}
[Test]
public void Given_input_longer_than_required_by_Like()
{
CallSave("".PadLeft(513));
}
[Test]
[ExpectedException(typeof(ExpectationViolationException))]
public void Given_input_shorter_than_required_by_Like()
{
CallSave("".PadLeft(511));
}
private void CallSave(string value)
{
_bar.Save(value);
_foo.AssertWasCalled(x => x.Write(Arg.Text.Like(".{512,}")));
}
Тесты также проходят, если я, кстати, использую .Expect () вместо .AssertWasCalled ().
private void CallSave(string value)
{
_foo.Expect(x => x.Write(Arg.Text.Like(".{512,}")));
_bar.Save(value);
_foo.VerifyAllExpectations();
}
Если эти тесты пройдут для вас, и вы уверены в длине аргумента, убедитесь, что вызывается Write, изменив тест на
_foo.AssertWasCalled(x => x.Write(Arg<specify type here>.Is.Anything))
редактирование:
Тесты также проходят с RhinoMocks версии 3.6.0.0