2017-06-06 6 views
1

私はサークルで回っています。だから私のWebApiは、私がデバッグで実行しているときに、ブラウザに必要な出力を返します。 FirefoxとIEは私が必要とするリストを表示します。しかし、私がMockとAutofacを使ってユニットテストをしようとしているときには、HttpResponseMessage私は戻ってきていません。私はそれが別の文脈やそれに類するものに戻っていると感じる。私は完全には分からないので、質問しています。私はグーグルとAutofacのドキュメントを使って、以下のユニットテストをまとめました。ユニットテストHttpResponseMessage(AutofacとMoqを使用)

WebApiMethod(InScrapController内に含まれ、_WebScrapSprocServiceコンストラクタでAutofacによって注入される)

public HttpResponseMessage GetFormItemsByFormNumber(int FormNumber) 
{ 
    HttpResponseMessage response; 
    try 
    { 
     //response = Request.CreateResponse(HttpStatusCode.OK, _WebScrapSprocService.GetFormItemsByFormNumber(FormNumber),new MediaTypeHeaderValue("application/json")); 
     response = Request.CreateResponse(HttpStatusCode.OK, new MediaTypeHeaderValue("application/json")); 
     response.Content = new StringContent(JsonConvert.SerializeObject(_WebScrapSprocService.GetFormItemsByFormNumber(FormNumber)),Encoding.UTF8, "application/json"); 
    } catch (Exception e) 
    { 
     response = Request.CreateResponse(HttpStatusCode.InternalServerError, new StringContent(e.Message), new MediaTypeHeaderValue("application/json")); 
    } 
    //Checking if bob knows anything about this... 
    string bob = response.Content.ReadAsStringAsync().Result; 
    return response; 
} 

ユニットテスト

public void GetFormItemsByFormNumber() 
{ 
    using (var mock = AutoMock.GetLoose()) 
    { 

     var Service = mock.Mock<IWebScrapSprocService>().Setup(x => x.GetFormItemsByFormNumber(3392)); 
     var service = mock.Create<InScrapController>(); 
     service.Request = new HttpRequestMessage(); 
     service.Request.SetConfiguration(new HttpConfiguration()); 
     var HttpResponse = service.Request.CreateResponse(HttpStatusCode.OK, Service, new MediaTypeHeaderValue("application/json")); 
     var response = service.GetFormItemsByFormNumber(3392); 
     mock.Mock<IWebScrapSprocService>().Verify(x => x.GetFormItemsByFormNumber(3392)); 
     Assert.AreEqual(HttpResponse, response); 
    } 
} 

答えて

1

これらの応答が同じであることを行っていません。また、テスト中のメソッドをリファクタリングする必要があります。何も返さないようにサービスを設定していないため、コンテンツを取り戻すこともありません。

public IHttpActionResult GetFormItemsByFormNumber(int FormNumber) { 
    IHttpActionResult response; 
    try { 
     var result = _WebScrapSprocService.GetFormItemsByFormNumber(FormNumber); 
     response = Ok(result); 
    } catch (Exception e) { 
     response = InternalServerError(e); 
    } 
    return response; 
} 

次に試験

public void GetFormItemsByFormNumber() { 
    using (var mock = AutoMock.GetLoose()) { 
     // Arrange. 
     var formNumber = 3392; 
     var items = new List<FormItemsByFormNumber> { 
      new FormItemsByFormNumber { 
       //Populate as needed 
      }, 
      new FormItemsByFormNumber { 
       //Populate as needed 
      }, 
      //...etc 
     }; 
     var serviceMock = mock.Mock<IWebScrapSprocService>(); 
     serviceMock.Setup(x => x.GetFormItemsByFormNumber(formNumber)) // Calling this... 
      .Returns(items) // should return some value... 
      .Verifiable(); // and I want to verify that it was called. 
     var sut = mock.Create<InScrapController>(); 

     // Act. 
     var response = sut.GetFormItemsByFormNumber(formNumber) as OkNegotiatedContentResult<List<FormItemsByFormNumber>>(); 

     // Assert. 
     serviceMock.Verify(); //verify setups were exercised as expected. 
     Assert.IsNotNull(response); 
    } 
} 
+0

を単に 'ストリングボブ= response.Content.ReadAsStringAsync()を除去するための任意の理由を更新する結果、'私が午前問題はReadAsStringAsyncは単にmockableされていないこと形ステム –

+0

私は応答内容を嘲笑せず、ただ応答を設定しました –

関連する問題