我想使用visual studio单元测试来测试我的项目,但它产生User.Identity.GetUserID()
的空引用错误有没有办法模拟它或我必须通过单元测试登录。我搜索了很多但没有找到解决方案。
这是要测试的代码
public PartialViewResult _AdmitPatient(int id)
{
if (cFunctions.AllowAccessToRecord((int)id, User.Identity.GetUserId(), "patient") == false)
{
return null;
}
Admission admission = new Admission();
admission.PatientID = id;
return PartialView(admission);
}
以下是此代码的单元测试
[TestMethod]
public void TestAdmitPatView()
{
var adc = new AdmissionController();
var res = adc._AdmitPatient(6);
Assert.AreEqual(adm.PatientID, res.ViewData);
}
如果我必须在单元测试中创建登录,请详细告诉我如何登录
答案 0 :(得分:0)
HttpContext.User属性正在处理托管应用程序。在测试环境中,这将为null。因为HttpContext.User不是由测试框架设置的。所以你应该通过模拟Fakeiteasy或Moq
之类的框架来创建一个假对象如果您使用的是FakeItEasy,则可以创建对象:
[TestMethod]
public void TestAdmitPatView()
{
var adc = new AdmissionController();
adc.ControllerContext = A.Fake<ControllerContext>();
var fakePrincipal = A.Fake<IPrincipal>();
var fakeIdentity = new GenericIdentity( "username" );
A.CallTo( () => fakePrincipal.Identity ).Returns( fakeIdentity );
A.CallTo( () => HomeController.ControllerContext.HttpContext.User ).Returns( fakePrincipal );
var res = adc._AdmitPatient(6);
Assert.AreEqual(adm.PatientID, res.ViewData);
}
如果你的cFunctions.AllowAccessToRecord
方法正在调用数据库,你也应该伪造它。