RhinoMocks / AssertWasCalled: проверка длины аргумента? - PullRequest
0 голосов
/ 06 декабря 2010

Мой тест MSpec подтвердит, что данный метод был вызван с аргументом (по крайней мере) данной длины.

Этот синтаксис не соответствует утверждению, несмотря на то, что аргумент (во время выполнения) имеет длину 534:

_foo.AssertWasCalled(x => x.Write(Arg.Text.Like(".{512,}")));

ExpectationViolationException: IFoo.Write (например, ". {512,}"); Ожидаемый # 1, фактический # 0.

Что я сделал не так с шаблоном Like ()?

Ответы [ 2 ]

0 голосов
/ 06 декабря 2010

Возможно, это связано с версией 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

0 голосов
/ 06 декабря 2010

Почему бы не проверить длину аргумента непосредственно

 Assert.IsTrue(Arg.Text.Length >= 512);

Обычно в Rhino дразнит, когда вы получаете "Ожидаемый # 1, Фактический # 0". это означает, что есть проблема с Equals, например, если он не реализовал equals для объекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...