我创建了一个基本api控制器,允许我从标题中访问数据。
public virtual int GetHeaderData()
{
if (Request != null)
{
var headers = Request.Headers;
int customValue;
if (headers.Contains("mycustomvalue"))
{
int.TryParse(headers.GetValues("mycustomvalue").First(), out customValue);
return customValue;
}
}
throw new Exception();
}
所以从任何控制器调用这个都很容易,例如GetHeaderData()
然而,对我来说,单元测试似乎非常困难,因为助手需要
Request.Headers
我真的应该尝试在控制器级别读取标头值,还是应该在其他地方执行此操作,以便更容易测试?
我正在寻找一些关于我应该做的最好方法的建议。
谢谢
答案 0 :(得分:0)
我不会到目前为止称这是一个建议,但只是建议你考虑。首先,单元测试不应该决定你的课堂设计。可以在控制器级别设置请求对象,以便Request.Headers
正确返回标题以供您进行单元测试。但是,如果我问自己问题这个方法是否属于控制器,答案是否定的,无论是否需要进行单元测试。如果我这样做,我宁愿为HttpRequestMessage
创建一个扩展方法。扩展方法只是语法糖,但它基本上是一个静态辅助方法,我可以在任何地方使用扩展方法 - 控制器,消息处理程序,过滤器等。然后,如果我愿意,我可以进行单元测试。