我正在使用xUnit和Moq为我的应用程序编写单元测试。 但是,我很难嘲笑会议。在.NET中嘲笑HttpContext.Session核心
被测系统是一个控制器动作,被测方法使用一个TempData["UserMessage"]
,它始终为空,因为会话未初始化。
我正在使用xUnit和Moq为我的应用程序编写单元测试。 但是,我很难嘲笑会议。在.NET中嘲笑HttpContext.Session核心
被测系统是一个控制器动作,被测方法使用一个TempData["UserMessage"]
,它始终为空,因为会话未初始化。
拇指的一般的规则是,以避免“脂肪控制器”。我的控制器字面上有他们需要对相应的服务执行的模型或参数。理想情况下,你的控制器的行动是有很多描述端点属性的单呼,考虑以下因素:
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-ready的ActionContext.HttpContext
。
感谢大卫,这让我很感慨:) – Rovdjuret
控制器应该是愚蠢的,你应该有一个服务和测试那些。 –
我确实有服务存储我的逻辑。你的意思是一个人不应该测试它?我的目的是测试在发送错误/正确值时是否返回了正确的用户消息。 – Rovdjuret
你只是测试框架是否做到了这一点,我通常试图避免这种情况。 –