Vraag Wat is de AAA-syntaxis equivalent aan het gebruik van Ordered () in Rhino Mocks


Ik kan niet voor het leven van mij de juiste syntax vinden met de syntaxis van Fluent / AAA in Rhino voor het valideren van de volgorde van bewerkingen.

Ik weet hoe ik dit moet doen met de old school record / afspeelsyntaxis:

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

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

Kan iemand mij vertellen wat het equivalent hiervan in de AAA-syntaxis voor Rhino Mocks zou zijn? Nog beter als je me hiervoor op wat documentatie kunt wijzen.


10
2018-04-21 15:08


oorsprong


antwoorden:


Probeer dit:

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

6
2018-04-21 15:40



Hier is een voorbeeld van interactietesten, dat is wat u gewoonlijk geordende verwachtingen wilt gebruiken voor:

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

Deze syntaxis is heel veel verwachten / verifiëren, maar voor zover ik weet is dit de enige manier om het nu te doen, en het maakt gebruik van enkele van de leuke functies die met 3.5 zijn geïntroduceerd.


4
2017-08-19 11:38



De statische helper GenerateMock samen met Ordered () werkte niet zoals verwacht voor mij. Dit is wat mij lukte (de sleutel lijkt te zijn om expliciet je eigen MockRepository-instantie te maken):

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

2
2018-01-23 18:02



tvanfossonDe oplossing werkt ook niet voor mij. Ik moest verifiëren dat oproepen in een bepaalde volgorde voor 2 mocks werden gedaan.

Volgens het antwoord van Ayende in Google Discussiegroepen  Ordered() werkt niet in AAA-syntaxis.


0
2018-06-03 00:43