例如我們在Web Api項目中有個Controller
public class SomeController : ApiController { public HttpResponseMessage Get() { // 一些操作 return Request.CreateResponse(HttpStatusCode.OK, someModel); } } |
如果你在
單元測試中直接調用 SomeController 的Get()方法,那么你將會收到一個Exception提示Request為Null。
因此我們需要在測試代碼中構造一個Request,有兩種方法
1、簡單構造法
[TestMethod] public void UnitTestMethod() { // 環境準備部分 YourNameSpace.Controllers.SomeController controller = new SomeController(); // 下面兩個語句是構造一個簡單的請求報文 controller.Request = new HttpRequestMessage(); controller.Request.SetConfiguration(new HttpConfiguration()); var result = controller.Get(); // 斷言 } |
2、可控性更強的構造
[TestMethod] public void UnitTestMethod() { // 環境準備部分 YourNameSpace.Controllers.SomeController controller = new SomeController(); var config = new HttpConfiguration(); var request = new HttpRequestMessage(HttpMethod.Post, "YourUrl"); var route = config.Routes.MapHttpRoute("DefaultApi", "api/{controller}/{id}"); var routeData = new HttpRouteData(route, new HttpRouteValueDictionary { { "controller", "products" } }); controller.ControllerContext = new HttpControllerContext(config, routeData, request); controller.Request = request; controller.Request.Properties[HttpPropertyKeys.HttpConfigurationKey] = config; var result = controller.Get(); // 斷言 } |
然后就可以運行單元測試查看結果了。