2016-05-12 2 views
0

に私はこのようになりますApiControllerメソッドを持って次のように... [OK]を、結果をチェックするためのためのユニットテストApiController方法ではないHttpStatusCode列挙

[HttpPost] 
    public IHttpActionResult Post([FromBody] GloballyEnumeratedMessage gem) 
    { 
     var result = _gemPublisher.PublishGem(gem); 

     if (result.Success) 
     { 
      return Ok(); 
     } 

     return new StatusCodeResult((HttpStatusCode)422, this); 
    } 

私のテストがあります。これにPostメソッドを変更することを決めた私は、他の潜在的な障害のためBadRequestを確保したかった

[TestMethod] 
    public void Post_InvalidGem_Returns400() 
    { 
     _gemPublisherMock.Setup(v => v.PublishGem(It.IsAny<GloballyEnumeratedMessage>())).Returns(ResultStatus.FromFailure()); 

     var controller = new PublishGemController(_gemPublisherMock.Object); 

     // Act 
     IHttpActionResult actionResult = controller.Post(It.IsAny<GloballyEnumeratedMessage>()); 

     // Assert 
     Assert.IsInstanceOfType(actionResult, typeof(BadRequestResult)); 
    } 

[TestMethod] 
    public void Post_ValidGem_Returns200() 
    { 
     _gemPublisherMock.Setup(v => v.PublishGem(It.IsAny<GloballyEnumeratedMessage>())).Returns(ResultStatus.FromSuccess()); 

     var controller = new PublishGemController(_gemPublisherMock.Object); 

     // Act 
     IHttpActionResult actionResult = controller.Post(It.IsAny<GloballyEnumeratedMessage>()); 

     // Assert 
     Assert.IsInstanceOfType(actionResult, typeof(OkResult)); 
    } 

は、私は422を返していました前に、私はBadRequestを返していましたし、テストでは、このように見えましたパブリッシュが失敗した場合は422を返します。私のテストで422のステータスコードがどのように見えるのでしょうか?

EDIT:以下、コントローラとのテストは、私はあなたが達成したいものを信じて何を質問

[TestMethod] 
public void Post_InvalidGem_Returns422() 
{ 
    _gemPublisherMock.Setup(v => v.PublishGem(It.IsAny<GloballyEnumeratedMessage>())).Returns(ResultStatus.FromFailure()); 

    var controller = new PublishGemController(_gemPublisherMock.Object); 

    // Act 
    IHttpActionResult actionResult = controller.Post(It.IsAny<GloballyEnumeratedMessage>()); 
    var result = (StatusCodeResult) actionResult; 

    // Assert 
    Assert.IsInstanceOfType(actionResult, typeof(StatusCodeResult)); 
    Assert.AreEqual(422, (int)result.StatusCode); 
} 
+1

結果が 'StatusCodeResult'であり、ステータスが422であることを確認できませんか? –

+0

ありがとう、どうすればいいですか?何かのように: 'var contentResult = actionResult as StatusCodeResult; Assert.AreEqual(422、(int)contentResult.StatusCode); '? – Robodude

+0

これを解決策として提出して、それを解決するとマークします。 – Robodude

答えて

1

にコメントをオフに基づいて解決:

コントローラー:

public class MyTestController : ApiController 
{ 
    [HttpPost] 
    public IHttpActionResult Post([FromBody] object gem) 
    { 
     return new StatusCodeResult((HttpStatusCode)422, this); 
    } 
} 

テスト:

[TestMethod] 
    public void Post_Returns422() 
    { 
     var controller = new MyTestController(); 

     // Act 
     IHttpActionResult actionResult = controller.Post(It.IsAny<object>()); 

     // Assert 
     Assert.IsInstanceOfType(actionResult, typeof(StatusCodeResult)); 
     Assert.AreEqual((int)((StatusCodeResult)actionResult).StatusCode,422); 
    } 
+0

あなたは正しい軌道にいると思いますが、actionResultにはそのプロパティはありません。 – Robodude

+1

フィードバックいただきありがとうございます、私はそれに応じて私の答えを更新しました。 – MSC

関連する問題