我是新来的mvc4和TDD.
当我尝试运行此测试失败,我不知道为什么.我尝试了很多事情,我开始在圈子里跑来跑去.
// GET api/User/5 [HttpGet] public HttpResponseMessage GetUserById (int id) { var user = db.Users.Find(id); if (user == null) { //return Request.CreateResponse(HttpStatusCode.NotFound); throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.NotFound)); } return Request.CreateResponse(HttpStatusCode.OK,user); } [TestMethod] public void GetUserById() { //Arrange UserController ctrl = new UserController(); //Act var result = ctrl.GetUserById(1337); //Assert Assert.IsNotNull(result); Assert.AreEqual(HttpStatusCode.NotFound,result.StatusCode); }
结果:
Test method Project.Tests.Controllers.UserControllerTest.GetUserById threw exception: System.ArgumentNullException: Value cannot be null. Parameter name: request
解决方法
您测试失败,因为您在ApiController中使用的Request属性未初始化.如果您打算使用它,请确保初始化它:
//Arrange var config = new HttpConfiguration(); var request = new HttpRequestMessage(HttpMethod.Post,"http://localhost/api/user/1337"); var route = config.Routes.MapHttpRoute("Default","api/{controller}/{id}"); var controller = new UserController { Request = request,}; controller.Request.Properties[HttpPropertyKeys.HttpConfigurationKey] = config; //Act var result = controller.GetUserById(1337);