2010-12-06 4 views
0

Мой тест MSpec будет утверждать, что данный метод был вызван с аргументом (по крайней мере) заданной длины.RhinoMocks/AssertWasCalled: проверка длины аргумента?

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

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

ExpectationViolationException: IFoo.Write ("{512}" подобное); Ожидаемое # 1, действительное # 0.

Что я сделал неправильно с рисунком Like()?

ответ

0

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

+0

Я использовал «Я» в своем утверждении вместо моего контекста/установки. Я уложил вещи в ваш код, и мой код теперь работает так, как ожидалось. Большое спасибо. – lance 2010-12-06 21:22:20

0

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

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

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

+1

Мое понимание Arg.Text заключается в том, что оно доступно только во время вызова AssertWasCalled()? – lance 2010-12-06 16:39:12

 Смежные вопросы

  • Нет связанных вопросов^_^