using Calculator.Domain; using Calculator.Presentation.Commands; using MbUnit.Framework; using Rhino.Mocks; namespace Calculator.Test.presentation.commands { [TestFixture] public class AdditionOperationCommandTest { [SetUp] public void SetUp() { mockery = new MockRepository( ); builder = mockery.DynamicMock< INumberBuilder >( ); calculation = mockery.DynamicMock< ICurrentCalculation >( ); } private IAdditionOperationCommand CreateSUT() { return new AdditionOperationCommand( builder, calculation ); } [Test] public void should_leverage_builder_to_retrieve_the_current_number() { using ( mockery.Record( ) ) { Expect.Call( builder.Build( ) ).Return( null ).Repeat.AtLeastOnce( ); } using ( mockery.Playback( ) ) { CreateSUT( ).Execute( ); } } [Test] public void Should_start_new_expression_using_the_number_retrieved_from_the_builder() { var number = mockery.DynamicMock< INumber >( ); using ( mockery.Record( ) ) { SetupResult.For( builder.Build( ) ).Return( number ); calculation.Enter( number ); } using ( mockery.Playback( ) ) { CreateSUT( ).Execute( ); } } [Test] public void should_append_addition_operation_to_calculation() { using ( mockery.Record( ) ) { using ( mockery.Ordered( ) ) { calculation.Enter( null ); LastCall.IgnoreArguments( ); calculation.Include( Operators.Addition ); } } using ( mockery.Playback( ) ) { CreateSUT( ).Execute( ); } } private INumberBuilder builder; private ICurrentCalculation calculation; private MockRepository mockery; } }