我正在使用本地的 .net Visual Studio 测试工具来测试我的控制器。 尝试确保在此处(代码的开头)如果传递给控制器的内容未通过授权,则设置未经授权的状态代码。以下是我的控制器代码。
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
失败。期望值为:<未授权 (System.Net.HttpStatusCode)>
。实际值为:<0 (System.Int32)>
。