【问题标题】:What is the AAA syntax equivalent to using Ordered() in Rhino Mocks在 Rhino Mocks 中使用 Ordered() 的 AAA 语法是什么?
【发布时间】:2010-10-20 20:37:14
【问题描述】:

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

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

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

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

谁能告诉我在 AAA 语法中 Rhino Mocks 的等价物是什么。如果你能指出一些相关的文档就更好了。

【问题讨论】:

    标签: c# unit-testing rhino-mocks


    【解决方案1】:

    试试这个:

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

    【讨论】:

    • 谢谢,这似乎是我需要的。
    • 这对我不起作用。我错过了什么吗?在此线程中发布了对我有用的内容作为回复。
    • 您使用的是哪个版本的 Rhino Mocks?
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案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();
        

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-01-08
          • 1970-01-01
          • 2012-01-29
          • 1970-01-01
          • 2010-09-08
          • 1970-01-01
          相关资源
          最近更新 更多