【发布时间】:2020-07-30 20:34:00
【问题描述】:
根据定义 here 的 Moq Quickstart 的最后一部分,我正在尝试配置以下 Mock 以便将 Form 值传递给被测控制器方法:
var formCollection = new FormCollection(
new System.Collections.Generic.Dictionary<string, Microsoft.Extensions.Primitives.StringValues>()
{
{"mAction", "someAction" },
{"mRefId", "0" }
});
var controllerContext = Mock.Of<ControllerContext>(ctx =>
ctx.HttpContext.Request.Form == formCollection);
controller.ControllerContext = controllerContext;
但是,当运行测试时,它在Mock.Of<> 行上失败并出现以下错误:
System.NotSupportedException:不支持的表达式:mock => mock.HttpContext
不可覆盖的成员(此处为:ActionContext.get_HttpContext)不得用于设置/验证表达式。
我错过了什么?我的做法与快速入门文档中定义的示例不同吗?
【问题讨论】:
-
ControllerContext.HttpContext属性不是virtual,所以 mock 无法覆盖它。
标签: c# unit-testing asp.net-core moq