2009-04-21 18 views
9

RhinoのFluent/AAA構文を使用して正しい順序で動作を検証することはできません。Rhino MockでOrdered()を使用することに相当するAAA構文は何ですか

私は古い学校の記録/再生の構文でこれを行う方法を知っている:

 MockRepository repository = new MockRepository(); 
     using (repository.Ordered()) 
     { 
      // set some ordered expectations 
     } 

     using (repository.Playback()) 
     { 
      // test 
     } 

誰もがRhinoのモックのためのAAAの構文でこれに相当するがどうなるかを教えてもらえます。あなたが私のためにいくつかのドキュメントを指すことができればさらに良い。

答えて

6

はこれを試してみてください:

// 
    // Arrange 
    // 
    var mockFoo = MockRepository.GenerateMock<Foo>(); 
    mockFoo.GetRepository().Ordered(); 
    // or mockFoo.GetMockRepository().Ordered() in later versions 

    var expected = ...; 
    var classToTest = new ClassToTest(mockFoo); 
    // 
    // Act 
    // 
    var actual = classToTest.BarMethod(); 

    // 
    // Assert 
    // 
    Assert.AreEqual(expected, actual); 
mockFoo.VerifyAllExpectations(); 
+0

ありがとう、これは私が必要としているようです。 – mockobject

+0

これは私にとってはうまくいかなかった。何か不足していますか?このスレッドの回答として、私にとって何がうまくいったのかを投稿しました。 – Gishu

+0

使用しているRhino Mockのバージョンは? – tvanfosson

4

ここでは、通常のために注文した期待を使いたいものです相互作用のテストと例です:

// Arrange 
var mockFoo = MockRepository.GenerateMock<Foo>(); 

using(mockFoo.GetRepository().Ordered()) 
{ 
    mockFoo.Expect(x => x.SomeMethod()); 
    mockFoo.Expect(x => x.SomeOtherMethod()); 
} 
mockFoo.Replay(); //this is a necessary leftover from the old days... 

// Act 
classToTest.BarMethod 

//Assert 
mockFoo.VerifyAllExpectations(); 

この構文は非常に期待/確認しますが、限りあります私が知っているように、それは今それを行う唯一の方法であり、3.5で導入された素敵な機能を利用しています。

2

Ordered()と一緒にGenerateMock静的ヘルパーが私の期待どおりに動作しませんでした。

[Test] 
    public void Test_ExpectCallsInOrder() 
    { 
     var mockCreator = new MockRepository(); 
     _mockChef = mockCreator.DynamicMock<Chef>(); 
     _mockInventory = mockCreator.DynamicMock<Inventory>(); 
     mockCreator.ReplayAll(); 

     _bakery = new Bakery(_mockChef, _mockInventory); 

     using (mockCreator.Ordered()) 
     { 
      _mockInventory.Expect(inv => inv.IsEmpty).Return(false); 
      _mockChef.Expect(chef => chef.Bake(CakeFlavors.Pineapple, false)); 
     } 


     _bakery.PleaseDonate(OrderForOnePineappleCakeNoIcing); 

     _mockChef.VerifyAllExpectations(); 
     _mockInventory.VerifyAllExpectations(); 
    } 
0

tvanfossonのソリューションはどちらか私のために動作しません:これは、(キーが明示的に独自のMockRepositoryインスタンスを作成することのようです)私のためのトリックをやったことです。私は2つのモックのために特定の順序でコールが行われることを確認する必要がありました。

Google GroupsOrdered()のAyendeの回答によると、AAA構文では機能しません。

関連する問題