gpt4 book ai didi

c# - 我的测试中有模型 usermanager

转载 作者:行者123 更新时间:2023-11-30 18:18:29 26 4
gpt4 key购买 nike

我必须为我的单元测试创​​建 owin 环境,这是创建 Usermanager 对象所必需的。在我目前的情况下,我的 usermanager 为空,因为它没有获取 owincontext。

这是我访问用户管理器的代码

public SLUser FindByName(string userName)
{
return UserManager.FindByName(userName);

}

这里是设置usermanager的代码

public SLUserManager UserManager
{
get
{
return _userManager ?? HttpContext.Current.GetOwinContext().GetUserManager<SLUserManager>();
}
set
{
_userManager = value;
}

}

我遇到的异常

System.InvalidOperationException was caught
HResult=-2146233079
Message=No owin.Environment item was found in the context.
Source=Microsoft.Owin.Host.SystemWeb

我尝试创建运行启动 .configureauth() 方法的后台线程,该方法创建 usermanager 对象并创建 owien 上下文。以便它可以为我的测试方法获取 owin 上下文。这是正确的方法吗..??建议回复即可

最佳答案

我可能是错的,但听起来问题在于您的测试正在尝试使用 SLUserManager 的真实实现。如果您不设置此属性,那么当您尝试访问它时,您的代码将尝试创建一个本地默认值(使用这行代码)

return _userManager ?? HttpContext.Current.GetOwinContext().GetUserManager<SLUserManager>();

对于您的单元测试,有一种解决方法,因为您的 UserManager 属性有一个公共(public) setter ,您可以创建一个模拟 SLUserManager 并在您的测试中设置它(避免必须使用本地默认设置)

    [Test]
public void FindByName_WhenPassedUserName_ReturnsSLUserWithUserName()
{
var myClassBeingTested = "";//create an instance of the class being tested
var mockSLUserManager = "";//create a mock version of SLUserManager
myClassBeingTested.UserManager = mockSLUserManager;
var userName = "mark_h";
var expected = mockSLUserManager.FindByName(userName);

var result = myClassBeingTested.FindByName(userName);

Assert.AreEqual(expected, result);
}

可能比较棘手的部分是您的模拟 SLUserManager,这是一个您可以在测试环境中完全控制的类。

您不应针对由您无法控制的代码为您创建的 SLUserManager 实现进行测试。这不是单元测试,因为您不再纯粹测试您的代码“单元”。

在您提供的示例中,您实际需要测试什么? - 您需要测试,当调用“FindbyName”时,它将此调用委托(delegate)给 UserManager,然后返回预期结果。如果您的 UserManager 损坏并且没有返回 SLUser 或返回错误的用户管理器,那么这不是您尝试进行单元测试的代码失败。

为了进一步解释我的观点,您提供的代码非常简单,我假设您确信它是正确的。因此,它应该通过单元测试,但不是因为“GetUserManager”失败。您没有编写失败的代码,因此您需要将它与您的测试隔离开来,并且只测试您正在编写的代码。

如果您是模拟的新手,我建议您在继续之前阅读一些相关内容。

关于c# - 我的测试中有模型 usermanager,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41356974/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com