10

我一辈子都找不到在 Rhino 中使用 Fluent/AAA 语法来验证操作顺序的正确语法。

我知道如何使用旧的学校记录/播放语法来做到这一点:

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

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

谁能告诉我在 Rhino Mocks 的 AAA 语法中相当于什么。如果您能指出我的一些文档,那就更好了。

4

4 回答 4

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();
于 2009-04-21T15:40:53.537 回答
5

这是一个交互测试示例,您通常希望将有序期望用于:

// 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();

这种语法非常类似于 Expect/Verify,但据我所知,这是目前唯一的方法,它确实利用了 3.5 引入的一些不错的特性。

于 2009-08-19T11:38:55.023 回答
2

GenerateMock 静态助手和 Ordered() 对我来说没有按预期工作。这就是我的诀窍(关键似乎是显式创建您自己的 MockRepository 实例):

    [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();
    }
于 2010-01-23T18:02:14.233 回答
0

tvanfosson的解决方案对我也不起作用。我需要验证是否以特定顺序对 2 个模拟进行了调用。

根据 Ayende 在Google Groups Ordered()中的回复在 AAA 语法中不起作用。

于 2011-06-03T00:43:50.483 回答