2010-12-06 8 views
0

私のMSpecテストは、指定されたメソッドが(少なくとも)与えられた長さの引数で呼び出されたことをアサートします。RhinoMocks/AssertWasCalled:引数の長さを検証していますか?

この構文は、534の長さを有する(実行時)の引数にもかかわらず、アサーションが失敗している。

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

ExpectationViolationException:IFoo.Write( "{512}" など)。期待される#1、実際の#0。

Like()のパターンで何が間違っていますか? Rhinoで一般

直接

Assert.IsTrue(Arg.Text.Length >= 512); 
をarguementの長さをテストしていないのはなぜ

答えて

0

おそらく、使用している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,}"))); 
} 

Iの方法により.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

私はコンテキスト/セットアップの代わりに私のアサーションにLikeを使用していました。私はあなたのコードごとに物事を配置し、私のコードは現在、期待どおりに動作しています。どうもありがとう。 – lance

0

あなたが取得するときに皮肉って "期待#1、#実際の0を。" Equalsに問題があることを意味します。たとえば、オブジェクトにequalsを実装していないなどです。

+1

Arg.Textを理解することは、AssertWasCalled()呼び出し中にのみ利用できるということですか? – lance

関連する問題