我正在使用xUnit和Moq为我的应用程序编写单元测试。 但是,我很难嘲笑会议。
被测系统是一个控制器动作,被测试的方法使用TempData["UserMessage"]
,由于会话未初始化,因此总是为空。
答案 0 :(得分:2)
一般的经验法则是避免使用“脂肪控制器”。我的控制器字面上有他们需要针对相应服务执行的模型或参数。理想情况下,您的控制器操作是一次调用,其中包含许多描述端点的属性,请考虑以下事项:
public class MyThinController : Controller
{
[
HttpGet,
Route("api/[controller]/foos/{bar}"),
Authorize(Policy = nameof(Policies.StackoverflowOp))
]
public Task<IActionResult> GetFoo([FromRoute] Bar bar,
[FromServices] IExampleService service)
=> service.GetAsync(bar);
}
然后,您唯一关心的问题应该是bar
IExampleService
的实施正确获得Foo
。
但如果你完全不愿意以正确的方式去做,总会有一种方法以错误的方式做到这一点。您实际上正在寻找准备好moq的ActionContext.HttpContext
。