我有一个程序集有一个公共方法。我想为这种方法写一个单元测试。 要创建此类的实例,将调用默认的构造函数。我无法改变这一点。 所有此方法都会检查传入该方法的对象,并根据值更新数据库中的表。 对于单元测试,我想验证数据库调用已经完成。 我想嘲笑数据库。这样做的最好方法是什么? 到目前为止,我已经添加了一个IRepository类型的属性。 在该方法中,如果这是空的,我创建一个Repository实例。我的想法是,在单元测试中,我将把这个属性设置为Mocked Repository。这听起来不错吗?单元测试和嘲笑分号
public IRepository DatabaseInstance { get; set; }
public void Process(ObjectContext context)
{
if (DatabaseInstance == null)
DatabaseInstance = new UpdateRepository();
// Depending on value in context, set up values of sprocToCall and listOfParameters
//Eventually call UpdateTable
DatabaseInstance.UpdateTable(sprocToCall, listOfParameters);
}
测试数据库是一个集成测试,而不是单元测试。但是,如果你嘲笑数据库,那么你一点都没有测试,这是毫无意义的。除非你在Process()中有业务逻辑,否则我不打扰。 – Crowcoder
有一些商业逻辑..在取决于对象的上下文的值不同的表在数据库中更新。 – Fiona
您声明您的目标是验证数据库调用是否已完成,但您将如何通过模拟来做到这一点?如果您正在测试独立于数据访问的业务逻辑,那么模拟数据是绝对合适的。你可能需要设置依赖注入(用于交换界面),或者你需要将你的数据访问分割成一个新的虚拟方法,可以用[Moq](https://github.com/Moq)/moq4 /维基/快速开始)。 – Crowcoder