C# 测试使用User.Identity.Name的Asp.Net控制器操作方法?
我有以下Asp.Net控制器操作方法的测试方法C# 测试使用User.Identity.Name的Asp.Net控制器操作方法?,c#,asp.net,unit-testing,mstest,C#,Asp.net,Unit Testing,Mstest,我有以下Asp.Net控制器操作方法的测试方法 [TestMethod] public void Get() { var controller = new MyController(); var result = controller.GetAListOfRecords(); Assert.IsNotNull(result); Assert.IsTrue(result.Count() > 0); } 行动是 [Authorize(Roles = "User
[TestMethod]
public void Get()
{
var controller = new MyController();
var result = controller.GetAListOfRecords();
Assert.IsNotNull(result);
Assert.IsTrue(result.Count() > 0);
}
行动是
[Authorize(Roles = "Users")]
public IQueryable<MyModel> GetAListOfRecords()
{
var user = User.Identity.Name; // null when called from the test method
var q = from t in ........
select t;
return return string.IsNullOrEmpty(user) ? Enumerable.Empty<MyModel>().AsQueryable() : q;
}
实际上,您正在控制器对象上使用User属性。此属性正在使用底层HttpContext.Current。您需要模拟HttpContextBase并返回一个测试用户,例如,请参阅。实际上,您正在控制器对象上使用user属性。此属性正在使用底层HttpContext.Current。您需要模拟HttpContextBase并返回测试用户,例如,请参见。您需要在单元测试中实现一些模拟。我还建议您删除对HttpContext的直接依赖,最好创建一个包装器对象,这样您就可以轻松地模拟它。关于这个方法
希望有帮助 您需要在单元测试中实现一些模拟。我还建议您删除对HttpContext的直接依赖,最好创建一个包装器对象,这样您就可以轻松地模拟它。关于这个方法
希望有帮助 我相信是的。然而,我不确定。您是否已尝试在测试项目上配置身份验证?您可以在
TestClass
的构造函数中对用户进行签名。您可以提供一些关于如何在测试类中登录的详细信息吗?似乎还需要添加所有依赖的asp.net DLL?我相信是的。然而,我不确定。您是否已尝试在测试项目上配置身份验证?您可以在TestClass
的构造函数中对用户进行签名。您可以提供一些关于如何在测试类中登录的详细信息吗?似乎还需要添加所有依赖的asp.net DLL?
controller.RequestContext.Principal.Identity.Name = @"mdynycmas\wangyi";