2016-10-10 37 views
1

我正在使用xUnit和Moq为我的应用程序编写单元测试。 但是,我很难嘲笑会议。在.NET中嘲笑HttpContext.Session核心

被测系统是一个控制器动作,被测方法使用一个TempData["UserMessage"],它始终为空,因为会话未初始化。

这是我试图嘲笑依赖关系的打印屏幕。 enter image description here

错误抛出处于线65并且被以下 enter image description here

+0

控制器应该是愚蠢的,你应该有一个服务和测试那些。 –

+0

我确实有服务存储我的逻辑。你的意思是一个人不应该测试它?我的目的是测试在发送错误/正确值时是否返回了正确的用户消息。 – Rovdjuret

+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); 
} 

然后,你唯一关注的应该是给定一个barIExampleService实施工作不正确得到Foo

但是,如果你完全不愿意以正确的方式做到这一点,总有办法以错误的方式做到这一点。你实际上正在寻找moq-ready的ActionContext.HttpContext

+0

感谢大卫,这让我很感慨:) – Rovdjuret