using Calculator.Domain; using Calculator.Presentation.Commands; using MbUnit.Framework; using Rhino.Mocks; namespace Calculator.Test.presentation.commands { [TestFixture] public class SubtractionCommandTest { [SetUp] public void SetUp() { _mockery = new MockRepository( ); _builder = _mockery.DynamicMock< INumberBuilder >( ); _calculation = _mockery.DynamicMock< ICurrentCalculation >( ); } public ISubtractionCommand CreateSUT() { return new SubtractionCommand( _builder, _calculation ); } [Test] public void should_leverage_builder_to_retrieve_the_current_number() { using ( _mockery.Record( ) ) { Expect.Call( _builder.Build( ) ).Return( new Number( ) ); } using ( _mockery.Playback( ) ) { CreateSUT( ).Execute( ); } } [Test] public void should_include_number_from_builder_to_current_calculation() { 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_include_subtraction_operation_to_current_calculation() { using ( _mockery.Record( ) ) { using ( _mockery.Ordered( ) ) { _calculation.Enter( null ); LastCall.IgnoreArguments( ); _calculation.Include( Operators.Subtraction ); } } using ( _mockery.Playback( ) ) { CreateSUT( ).Execute( ); } } private INumberBuilder _builder; private ICurrentCalculation _calculation; private MockRepository _mockery; } }