如何为 HttpContext.Current.Request.Headers 编写单元测试
How to write unit test for HttpContext.Current.Request.Headers
下面是一个例子。
public class MyController : Controller
{
[Route("~/api/mycontroller")]
[HttpGet]
public int ID()
{
try
{
return somecontroller.getID(ID);
}
catch (Exception ex)
{
throw ex;
}
}
}
在它上面的控制器正在从下面的控制器中获取 ID。
下面是它继承的控制器。
public class Controller : ApiController
{
public int ID
{
get
{
return int.Parse(HttpContext.Current.Request.Headers["ID"]);
}
}
}
如何为以下内容编写单元测试用例???
哦,单元测试HttpContext.Current
。这是我的最爱之一:-)
您不能为依赖于 HttpContext.Current
的内容编写单元测试。因此,如果您想编写可测试的代码,第一步是在整个解决方案中搜索 HttpContext.Current
关键字,然后简单地将它们从存在中删除。
在这种特殊情况下,您当然会用相应的抽象替换它们:
public class Controller : ApiController
{
public int ID
{
get
{
return int.Parse(Request.Headers.GetValues("ID").FirstOrDefault());
}
}
}
现在,正确地对您的 Web API 控制器进行单元测试变得非常简单:
// arrange
var sut = new MyController();
sut.Request = new HttpRequestMessage();
sut.Request.Headers.TryAddWithoutValidation("ID", "5");
// act
var actual = sut.SomeControllerAction();
// assert
Assert.AreEqual(5, actual);
下面是一个例子。
public class MyController : Controller
{
[Route("~/api/mycontroller")]
[HttpGet]
public int ID()
{
try
{
return somecontroller.getID(ID);
}
catch (Exception ex)
{
throw ex;
}
}
}
在它上面的控制器正在从下面的控制器中获取 ID。 下面是它继承的控制器。
public class Controller : ApiController
{
public int ID
{
get
{
return int.Parse(HttpContext.Current.Request.Headers["ID"]);
}
}
}
如何为以下内容编写单元测试用例???
哦,单元测试HttpContext.Current
。这是我的最爱之一:-)
您不能为依赖于 HttpContext.Current
的内容编写单元测试。因此,如果您想编写可测试的代码,第一步是在整个解决方案中搜索 HttpContext.Current
关键字,然后简单地将它们从存在中删除。
在这种特殊情况下,您当然会用相应的抽象替换它们:
public class Controller : ApiController
{
public int ID
{
get
{
return int.Parse(Request.Headers.GetValues("ID").FirstOrDefault());
}
}
}
现在,正确地对您的 Web API 控制器进行单元测试变得非常简单:
// arrange
var sut = new MyController();
sut.Request = new HttpRequestMessage();
sut.Request.Headers.TryAddWithoutValidation("ID", "5");
// act
var actual = sut.SomeControllerAction();
// assert
Assert.AreEqual(5, actual);