如何从测试类进行身份验证或登录到控制器



我想使用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方法是调用数据库,你也应该伪造它。

相关内容

  • 没有找到相关文章

最新更新