c# - 模拟 HttpContext.Current.User.Identity.Name

标签 c# moq httpcontext xunit

我目前正在为我在指定时间使用 HttpContext.Current.User.Identity.Name 的项目编写单元测试。不幸的是,我无法进行测试,因为在我运行测试时 HttpContext 为 null。

我已经尝试了一些我在互联网上找到的解决方案,例如 Thread.CurrentPrincipal = new GenericPrincipal(new GenericIdentity("rmllcc"), new string[0]); 但我无法让它工作.

我正在使用 Forms Authenticate 系统xUnitMoq。我不是在测试 Controller ,而是在测试一个 Repository,我只是在每次用户使用特定方法时记录日志。我怎么能做到这一点?

最佳答案

倾听您的测试告诉您的内容:利用此测试难以编写这一事实来思考您的代码结构。您已经在您的存储库层中引入了对 Web 应用程序的依赖。这不好。您的存储库中还有两件事正在进行:数据访问和日志记录。

也许将当前用户包装在一个抽象中,这将获得您需要的用户,但很容易被 stub 。或者,您可以将存储库包装在为您执行日志记录的装饰器中。

抱歉,这不是问题的直接答案,但是,当难以编写测试时,通常有更深层次的根本原因需要解决。

关于c# - 模拟 HttpContext.Current.User.Identity.Name,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37137287/

相关文章:

c# - 预期对模拟调用一次,但为 0 次 : No setups configured?

c# - 使用 Moq 更新、删除单元测试的方法

c# - eazfuscator 公共(public)成员未混淆

C#MVC : Return ViewModel or Model Class?

c# - 未设置对象引用 c#

c# - 当 SUIT 利用任务并行库时使用 Mocks 进行单元测试

asp.net-core - .net core HttpContext null inside async Task.Run

asp.net - SP2010 - httpcontext.response.write() 不适用于 LinkBut​​ton 的 onClick 事件

viewstate - 如何使用 HttpContext 访问当前页面的 ViewState?

c# - 使用属性在表单之间传输数据