【发布时间】:2014-03-07 15:43:23
【问题描述】:
我正在尝试编写一个单元测试来测试使用 HttpContext.GetGlobalResourceObject() 的方法,并且我想使用 Moq 来模拟它。
假设我们正在测试这个方法:
public List<DctmGridColumn> GetDctmColumnsMandatory()
{
List<DctmGridColumn> metadataFields = new List<DctmGridColumn>
{
new DctmGridColumn(HttpContext.GetGlobalResourceObject("SharePoint.Service", "DctmGridColumn_DispName_r_object_id").ToString()),
new DctmGridColumn(HttpContext.GetGlobalResourceObject("SharePoint.Service", "DctmGridColumn_DispName_object_name").ToString()),
new DctmGridColumn(HttpContext.GetGlobalResourceObject("SharePoint.Service", "DctmGridColumn_DispName_r_modify_date").ToString()),
new DctmGridColumn(HttpContext.GetGlobalResourceObject("SharePoint.Service", "DctmGridColumn_DispName_r_version_label").ToString())
};
return metadataFields;
}
这是我的测试:
[Test]
public void TestGetDctmColumnsMandatory_IsNotNull()
{
var columns = _viewDefinitionOperations.GetDctmColumnsMandatory();
Assert.IsNotNull(columns);
}
如何模拟 HttpContext?我整天都在谷歌上搜索,我发现了一两个使用模拟框架的示例,其余的则创建了自己的模拟。我尝试使用Setting HttpContext.Current.Session in a unit test 中标记为答案的方法,但随后我将不得不“用 HttpContextFactory.Current 替换对 HttpContext.Current 的任何调用,并可以访问相同的方法。”我对那个解决方案不太满意。
我对模拟还很陌生,但我想一定有更简单的方法吗? 我只想将我对 HttpContext 的所有调用从单元测试定向到我的模拟类。这要求太多了吗? :)
【问题讨论】:
标签: c# nunit moq httpcontext