【发布时间】:2015-11-18 11:24:35
【问题描述】:
我刚刚开始使用 C# Webforms 进行编程(之前有 VB Webforms 的经验),我正在制作一个 Web 应用程序,它将成为一个更大项目的一小部分。
我创建了 3 个独立的项目,一个用于 webforms,一个用于类库,一个用于测试。
我已将所有项目添加到一个解决方案中并添加了适当的引用,Webforms 和 Tests 项目都引用了类库。
我在类库中有一个类可以找到登录用户的用户名:
public class LoggedInUser
{
public string UserName
{
get { return HttpContext.Current.User.Identity.Name; }
}
}
在我的一个页面的页面加载事件中,我使用这个类来设置文字的 text 属性以在屏幕上显示名称。
protected void Page_Load(object sender, EventArgs e)
{
LoggedInUser CurrentUser = new LoggedInUser();
LitUser.Text = string.Format(" {0}", CurrentUser.UserName);
}
这很好用。
为了完整起见,我想我会编写一个单元测试来确保登录的用户名是我所期望的。
[TestMethod]
public void Test_Logged_In_User_Name()
{
LoggedInUser actualUser = new LoggedInUser();
string expectedUserName = "myUserName";
string actualUserName = actualUser.UserName;
Assert.AreEqual(expectedUserName, actualUserName);
}
当我运行测试时,它会抛出以下异常:
System.NullReferenceException: Object reference not set to an instance of an object
在这一行:
get { return HttpContext.Current.User.Identity.Name; }
任何想法都将一如既往地不胜感激。
【问题讨论】:
-
单元测试不能依赖任何依赖。您无法在单元测试中获取当前 http 上下文。单元测试没有启动您的网站,因此没有 httpcontext
标签: c# asp.net unit-testing webforms