我想使用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);
}
如果我必须在单元测试中创建登录,请详细告诉我如何登录
HttpContext.User 属性正在处理托管应用程序。这在测试环境中将为空。因为 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
方法是调用数据库,你也应该伪造它。