Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 测试使用User.Identity.Name的Asp.Net控制器操作方法?_C#_Asp.net_Unit Testing_Mstest - Fatal编程技术网

C# 测试使用User.Identity.Name的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

我有以下Asp.Net控制器操作方法的测试方法

[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";