public void should_send_notifications_before_and_after_the_task_is_executed() { // Arrange var task = SimpleTask.New<ExecuteSimpleTask>(); var taskWithAttributes = new MockSimpleTaskWithAttributes(); task.In.SimpleTask = taskWithAttributes; var mockInvocation = new Mock<IInvocation>(); mockInvocation.Setup(invocation => invocation.Proceed()).Callback(taskWithAttributes.Execute); task.In.Invocation = mockInvocation.Object; // Act task.Execute(); // Assert VerifyFiveCallbacks(taskWithAttributes); }
static void VerifyFiveCallbacks(MockSimpleTaskWithAttributes simpleTaskWithAttributes) { Assert.That(simpleTaskWithAttributes.CallbackQueue.Count, Is.EqualTo(5)); // Note: Attributes on a class are not returned in any order and therefore the it can not be assumed that the // first attribute will receive the first callback. if (simpleTaskWithAttributes.CallbackQueue.Peek().Contains("First")) { Assert.That(simpleTaskWithAttributes.CallbackQueue.Dequeue(), Is.EqualTo("First.Before")); Assert.That(simpleTaskWithAttributes.CallbackQueue.Dequeue(), Is.EqualTo("Second.Before")); Assert.That(simpleTaskWithAttributes.CallbackQueue.Dequeue(), Is.EqualTo("Execute")); Assert.That(simpleTaskWithAttributes.CallbackQueue.Dequeue(), Is.EqualTo("Second.After")); Assert.That(simpleTaskWithAttributes.CallbackQueue.Dequeue(), Is.EqualTo("First.After")); } else { Assert.That(simpleTaskWithAttributes.CallbackQueue.Dequeue(), Is.EqualTo("Second.Before")); Assert.That(simpleTaskWithAttributes.CallbackQueue.Dequeue(), Is.EqualTo("First.Before")); Assert.That(simpleTaskWithAttributes.CallbackQueue.Dequeue(), Is.EqualTo("Execute")); Assert.That(simpleTaskWithAttributes.CallbackQueue.Dequeue(), Is.EqualTo("First.After")); Assert.That(simpleTaskWithAttributes.CallbackQueue.Dequeue(), Is.EqualTo("Second.After")); } }