私のネイティブの.Netビジュアルスタジオテストツールを使用しています。コントローラに渡されたものが認可を通過しない場合、この時点(コードの始めから)に、私は不正なステータスコードが設定されていることを確認しようとしています。ここに私のコントローラコードです。ステータスコードのmvcコントローラをテストする方法
public class HubspotController : Controller
{
[HttpPost]
public ActionResult FreeDemo(string json)
{
JObject jobject = JObject.Parse(json);
var password = jobject["person"]["password"]?.ToString();
var username = jobject["person"]["username"]?.ToString();
if (!AuthorizeUser(password, username))
{
StatusUnauthorized();
}
var resultStatus = new ResultStatus { Message = "success"};
return Json(resultStatus, JsonRequestBehavior.AllowGet);
}
public ActionResult StatusUnauthorized()
{
return new HttpStatusCodeResult((int)HttpStatusCode.Unauthorized, "Unauthorized");
}
private bool AuthorizeUser(string password, string username)
{
return false;
}
}
これは私のテストです。私と一緒にいてください、私は多くのテスト経験がないので、これを理解しようとしています。
[TestClass]
public class HubspotControllerFixture
{
private Mock<HttpRequestBase> request;
private Mock<HttpContextBase> httpContext;
private Mock<HttpResponseBase> response;
[TestInitialize]
public void TestInitialize()
{
request = new Mock<HttpRequestBase>();
request.SetupGet(r => r.ContentType).Returns("application/json");
response = new Mock<HttpResponseBase>();
httpContext = new Mock<HttpContextBase>();
httpContext.SetupGet(c => c.Request).Returns(request.Object);
httpContext.SetupGet(x => x.Response).Returns(response.Object);
}
[TestMethod]
public void Status_Code_Gets_Set_To_Unauthorized()
{
var json = "{\"person\": {\"password\":\"abc123\", \"username\":\"user\", \"name\":\"test person\"}}";
var controller = new HubspotController()
{
ControllerContext = new ControllerContext()
{
HttpContext = httpContext.Object
}
};
controller.FreeDemo(json);
Assert.AreEqual(HttpStatusCode.Unauthorized, httpContext.Object.Response.StatusCode);
}
}
これを実行すると、エラーが発生します。私は間違って何をしていますか?
Assert.AreEqualに失敗しました。期待:
<Unauthorized (System.Net.HttpStatusCode)>
。実際:<0 (System.Int32)>
。
のためのHttpContext嘲笑を必要としないよう、あなたのテストは今、私はあなたがしているとして、あなたがテストでHTTPコンテキストを使用することができます疑うこのようになります。あなたのテストコードのリクエスト/レスポンスシナリオでは本当にありません。 –