tdd-如何测试User.Identity.Name是否显示在剃刀视图中



我正在尝试对一个剃刀视图(MVC.NET)进行单元测试。我想测试登录用户的名称是否出现在网站上。由于User.Identity.Name,我不确定我将如何做到这一点——这是一个静态对象,所以不能被嘲笑。

这个静态对象应该在测试中设置吗?有更好的方法吗?

谢谢!

您可以创建一个带有mock HttpContext的ControllerContext来返回您喜欢的IPrincipal。请参阅这篇关于如何做到这一点的文章:

Mocking和HttpContextBase.get_User()

该示例使用Rhino Mocks,但很容易适应您使用的任何mock框架。请确保伪IPrincipal.Identity.Name返回名称的字符串。如果你认为不清楚,我可以给你举一个FakeIseasy或Rhino Mocks的例子。

然后,您可以断言放置在视图的ViewBag或ViewModel中的用户名等于您让假IIdentity返回的名称。