我正在使用ASP.NET Web API的单元测试来编写测试用例。
现在我有了一个动作,它调用了我在服务层中定义的一些方法,其中我使用了以下代码行。
string username = User.Identity.Name;
// do something with username
// return something
现在我如何为此创建单元测试方法,我得到了空引用异常。我对编写单元测试之类的东西还是个新手。
我只想对此使用单元测试。在这件事上请帮帮我。
发布于 2012-10-08 20:45:38
下面的方法只是其中的一种:
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);
}
}
发布于 2012-11-04 02:00:48
这是我在NerdDinner
测试教程中找到的另一种方法。它在我的案例中起作用了:
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
发布于 2013-09-18 02:43:40
对于WebApi 5.0,这一点略有不同。您现在可以执行以下操作:
controller.User = new ClaimsPrincipal(
new GenericPrincipal(new GenericIdentity("user"), null));
https://stackoverflow.com/questions/12780185
复制相似问题