public void SingleAspect_If_ReturnCalled_InPipeline_Method_ShouldNot_BeCalled() { // Arrange var aspect = new ReturnDefaultValueAspect(BoundaryType.Entry); var pipeline = CreatePipeline <IService>( new Service(), nameof(IService.Identity), Args.Pack(aspect), Args.Box(10)); // Act _executor.ExecutePipeline(pipeline, pipeline.Invocation); // Assert InvocationAssert.ProceedNotCalled(pipeline.Invocation); Assert.Equal(new[] { new BoundaryState(BoundaryType.Entry) }, aspect.ExecutionStack); }
public void MultipleAspects_OnEntry_ReturnResult_OnSuccess_NotCalled_OnTriggered_Aspect_But_On_OuterAspects() { // Arrange var afterBreaker1 = new ObservableAspect { InternalOrder = 3 }; var afterBreaker2 = new ObservableAspect { InternalOrder = 2 }; var breaker = new ReturnDefaultValueAspect(BoundaryType.Entry) { InternalOrder = 1 }; var beforeBreaker = new ObservableAspect { InternalOrder = 0 }; var pipeline = CreatePipeline <IService>( new Service(), nameof(IService.Identity), Args.Pack(beforeBreaker, breaker, afterBreaker1, afterBreaker2), Args.Box(10)); // Act _executor.ExecutePipeline(pipeline, pipeline.Invocation); // Assert // Метод не вызвался, т.к. 2й аспект вернул результат InvocationAssert.ProceedNotCalled(pipeline.Invocation); // Первый аспект прошел весь нормальный флоу Assert.Equal(_normalExecutionStack, beforeBreaker.ExecutionStack); // Второй вернул результат и кроме OnEntry ничего не выполнилось Assert.Equal(new[] { new BoundaryState(BoundaryType.Entry) }, breaker.ExecutionStack); // Остальные не выполнились Assert.Empty(afterBreaker1.ExecutionStack); Assert.Empty(afterBreaker2.ExecutionStack); }