public void should_send_notifications_before_and_after_the_task_is_executed() { var task = Task.New<ExecuteTask>(); var taskWithAttributes = new MockTaskWithAttributes(); task.In.Task = taskWithAttributes; var mockInvocation = new Mock<IInvocation>(); mockInvocation.Setup(invocation => invocation.Proceed()).Callback(taskWithAttributes.Execute); task.In.Invocation = mockInvocation.Object; task.Execute(); VerifyFiveCallbacks(taskWithAttributes); }
static void VerifyFiveCallbacks(MockTaskWithAttributes taskWithAttributes) { Assert.That(taskWithAttributes.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 (taskWithAttributes.CallbackQueue.Peek().Contains("First")) { Assert.That(taskWithAttributes.CallbackQueue.Dequeue(), Is.EqualTo("First.Before")); Assert.That(taskWithAttributes.CallbackQueue.Dequeue(), Is.EqualTo("Second.Before")); Assert.That(taskWithAttributes.CallbackQueue.Dequeue(), Is.EqualTo("Execute")); Assert.That(taskWithAttributes.CallbackQueue.Dequeue(), Is.EqualTo("Second.After")); Assert.That(taskWithAttributes.CallbackQueue.Dequeue(), Is.EqualTo("First.After")); } else { Assert.That(taskWithAttributes.CallbackQueue.Dequeue(), Is.EqualTo("Second.Before")); Assert.That(taskWithAttributes.CallbackQueue.Dequeue(), Is.EqualTo("First.Before")); Assert.That(taskWithAttributes.CallbackQueue.Dequeue(), Is.EqualTo("Execute")); Assert.That(taskWithAttributes.CallbackQueue.Dequeue(), Is.EqualTo("First.After")); Assert.That(taskWithAttributes.CallbackQueue.Dequeue(), Is.EqualTo("Second.After")); } }