首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >为在ASP.NET Web API中使用User.Identity.Name的方法编写单元测试

为在ASP.NET Web API中使用User.Identity.Name的方法编写单元测试
EN

Stack Overflow用户
提问于 2012-10-08 18:49:09
回答 8查看 25.7K关注 0票数 42

我正在使用ASP.NET Web API的单元测试来编写测试用例。

现在我有了一个动作,它调用了我在服务层中定义的一些方法,其中我使用了以下代码行。

代码语言:javascript
代码运行次数:0
运行
复制
string username = User.Identity.Name;
// do something with username
// return something

现在我如何为此创建单元测试方法,我得到了空引用异常。我对编写单元测试之类的东西还是个新手。

我只想对此使用单元测试。在这件事上请帮帮我。

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2012-10-08 20:45:38

下面的方法只是其中的一种:

代码语言:javascript
代码运行次数:0
运行
复制
public class FooController : ApiController {

    public string Get() {

        return User.Identity.Name;
    }
}

public class FooTest {

    [Fact]
    public void Foo() {

        var identity = new GenericIdentity("tugberk");
        Thread.CurrentPrincipal = new GenericPrincipal(identity, null);
        var controller = new FooController();

        Assert.Equal(controller.Get(), identity.Name);
    }
}
票数 47
EN

Stack Overflow用户

发布于 2012-11-04 02:00:48

这是我在NerdDinner测试教程中找到的另一种方法。它在我的案例中起作用了:

代码语言:javascript
代码运行次数:0
运行
复制
DinnersController CreateDinnersControllerAs(string userName)
{

    var mock = new Mock<ControllerContext>();
    mock.SetupGet(p => p.HttpContext.User.Identity.Name).Returns(userName);
    mock.SetupGet(p => p.HttpContext.Request.IsAuthenticated).Returns(true);

    var controller = CreateDinnersController();
    controller.ControllerContext = mock.Object;

    return controller;
}

[TestMethod]
public void EditAction_Should_Return_EditView_When_ValidOwner()
{

    // Arrange
    var controller = CreateDinnersControllerAs("SomeUser");

    // Act
    var result = controller.Edit(1) as ViewResult;

    // Assert
    Assert.IsInstanceOfType(result.ViewData.Model, typeof(DinnerFormViewModel));
}

确保您阅读了完整的部分:Mocking the User.Identity.Name property

它使用Moq模拟框架,您可以使用NuGet将其安装到您的Test project中:http://nuget.org/packages/moq

票数 17
EN

Stack Overflow用户

发布于 2013-09-18 02:43:40

对于WebApi 5.0,这一点略有不同。您现在可以执行以下操作:

代码语言:javascript
代码运行次数:0
运行
复制
controller.User = new ClaimsPrincipal(
  new GenericPrincipal(new GenericIdentity("user"), null));
票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12780185

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档