public void ExecuteReentryAction_executes_ReentryAction() { var sale = new Sale(saleID: 96) { State = SaleState.Open }; var transitionResult = new StateTransitionResult <SaleState, SaleEvent>(SaleEvent.AddItem , SaleState.Open , SaleState.Open , SaleState.Open , "lastTransitionName"); var stateMachine = new StateMachine <Sale, SaleState, SaleEvent>(sale1 => sale1.State, (sale1, newState) => sale1.State = newState); var openState = new StateConfiguration <Sale, SaleState, SaleEvent>(SaleState.Open, stateMachine); var changeDueState = new StateConfiguration <Sale, SaleState, SaleEvent>(SaleState.ChangeDue, stateMachine); changeDueState.AddSuperstate(openState); var changeDueEntryActionFromOpenFired = false; changeDueState.AddReentryAction(sale1 => { changeDueEntryActionFromOpenFired = true; }); changeDueState.ExecuteReentryAction(sale, transitionResult); Assert.True(changeDueEntryActionFromOpenFired); }