Возможно, это связано с версией RhinoMocks, которую вы используете? Я использую RhinoMocks версии 3.5.0.1337 и как правильно определяет длину.
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();
}
Если эти тесты проходят для вас, и вы уверены, что о длине аргумента, то убедитесь, что запись вызывается путем изменения теста
_foo.AssertWasCalled(x => x.Write(Arg<specify type here>.Is.Anything))
редактирование:
Проверки также передаются с RhinoMocks версии 3.6.0.0
Я использовал «Я» в своем утверждении вместо моего контекста/установки. Я уложил вещи в ваш код, и мой код теперь работает так, как ожидалось. Большое спасибо. – lance 2010-12-06 21:22:20