public void WhenQueryingForQuestionnares_ThenProvidesQuestionnaireResult() { AsyncResult <Questionnaire> ar = null; Questionnaire suppliedQuestionnaire = new Questionnaire(); var serviceMock = new MockQuestionnaireService(); serviceMock.HandleBeginGetQuestionnaire = (r) => ar = r; var repository = new QuestionnaireRepository(serviceMock); IOperationResult <Questionnaire> getResult = null; repository.GetQuestionnaireAsync((result) => getResult = result); serviceMock.ProceedGetQuestionnaire(ar, suppliedQuestionnaire); EnqueueConditional(() => getResult != null); EnqueueCallback(() => { Assert.AreSame(suppliedQuestionnaire, getResult.Result); }); EnqueueTestComplete(); }
public void WhenServiceThrowsAnError_ThenErrorIsCaptured() { var mockAsyncResult = new Mock <IAsyncResult>(); var mockService = new Mock <IQuestionnaireService>(); mockService .Setup(s => s.BeginGetQuestionnaire(It.IsAny <AsyncCallback>(), It.IsAny <object>())) .Returns(mockAsyncResult.Object) .Callback <AsyncCallback, object>((c, o) => { c(mockAsyncResult.Object); }); mockService .Setup(s => s.EndGetQuestionnaire(It.IsAny <IAsyncResult>())) .Throws(new NotImplementedException("TestException")); var repository = new QuestionnaireRepository(mockService.Object); IOperationResult <Questionnaire> getResult = null; repository.GetQuestionnaireAsync((r) => { getResult = r; }); EnqueueConditional(() => getResult != null); EnqueueCallback(() => { Assert.IsInstanceOfType(getResult.Error, typeof(NotImplementedException)); }); EnqueueTestComplete(); }
public void WhenQueryingForQuestionnaires_ThenInvokesCallback() { AsyncResult <Questionnaire> ar = null; var serviceMock = new MockQuestionnaireService(); serviceMock.HandleBeginGetQuestionnaire = (r) => ar = r; var repository = new QuestionnaireRepository(serviceMock); bool calledBack = false; repository.GetQuestionnaireAsync((result) => { calledBack = true; }); serviceMock.ProceedGetQuestionnaire(ar, new Questionnaire()); EnqueueConditional(() => calledBack); EnqueueCallback(() => { Assert.IsTrue(calledBack); }); EnqueueTestComplete(); }
public void WhenQueryingForQuestionnaires_ThenPostsCallingThreadsSyncContext() { var mockAsyncResult = new Mock <IAsyncResult>(); var mockService = new Mock <IQuestionnaireService>(); mockService .Setup(s => s.BeginGetQuestionnaire(It.IsAny <AsyncCallback>(), It.IsAny <object>())) .Returns(mockAsyncResult.Object) .Callback <AsyncCallback, object>((c, o) => { System.Threading.ThreadPool.QueueUserWorkItem( (state) => { c(mockAsyncResult.Object); }); }); mockService .Setup(s => s.EndGetQuestionnaire(It.IsAny <IAsyncResult>())) .Returns(new Questionnaire()); var repository = new QuestionnaireRepository(mockService.Object); int callingThreadId = System.Threading.Thread.CurrentThread.ManagedThreadId; int calledBackThreadId = 0; IOperationResult <Questionnaire> getResult = null; repository.GetQuestionnaireAsync((r) => { getResult = r; calledBackThreadId = System.Threading.Thread.CurrentThread.ManagedThreadId; } ); EnqueueConditional(() => getResult != null); EnqueueCallback(() => { Assert.AreEqual(callingThreadId, calledBackThreadId); }); EnqueueTestComplete(); }