如何用moq模拟检查数据库中数据的if条件

本文关键字:数据 if 条件 数据库 何用 moq 模拟 检查 | 更新日期: 2023-09-27 17:50:49

我试图模拟一个方法,首先检查数据是否存在于数据库中,如果不是,那么它调用保存方法。我如何模拟if条件?

代码是这样的

public MyCode AddMyCode(MyCode myCode)
        {
            int workingUnitId = _sessionManager.CurrentUser.WorkingUnit.Id;
            if (!_db.MyCodes.Any(d => d.Code == myCode.Code && d.UnitId == this.CurrentUserParentUnitId))
            {
                _db.MyCodes.Add(myCode);
                SaveMyCode();
                return myCode;
            }
            return myCode;
        }

如何用moq模拟检查数据库中数据的if条件

您应该使用接口来解耦数据库访问代码(这里是EF)和业务逻辑。这样你就可以测试你的逻辑,而不需要一个真正的数据库。

一个好的教程可能是这样的:http://www.asp.net/mvc/tutorials/getting-started-with-ef-5-using-mvc-4/implementing-the-repository-and-unit-of-work-patterns-in-an-asp-net-mvc-application

您可以通过setting up some dummy data into MyCodes模拟数据库调用,并查看其余代码是否正常工作。

更新:

包含如下静态方法:

 public static Mock<ControllerContext> MockSession()
        {
            var controllerContext = new Mock<ControllerContext>();
            controllerContext.Setup(X => X.HttpContext.Session["UserName"]).Returns("Avinash");
            return controllerContext;
        }

那么你可以这样做:

In your test method,

使用上面的静态方法模拟会话:

 target.ControllerContext = MockSession().Object;

这将模拟会话。以上示例来自asp.net MVC Prespective。我不确定如何使用正常的web表单。