我需要测试一个返回值取决于数据库值的类。我可以在单元测试中点击数据库,但这些值可能会改变。有没有标准的解决方案呢?
答案 0 :(得分:4)
标准答案是重新设计你的课程,这样你就可以模拟出依赖关系。这通常通过将您的数据源作为接口注入您的类来完成。
e.g。你可能有一个类似下面的课程
class John
{
public John() { }
public void Load()
{
// call to db in here e.g SQLCommand
}
}
加载取决于SQLCommand,因此您始终需要为此
调用数据库如果注入数据源接口,则可以获得更大的灵活性
e.g。
class John
{ IDataSource _db;
public John(IDataSource db)
{
_db = db;
}
public void Load()
{
_db.Load("John"); // IDataSource can now be either SQL
//or hardcoded or what ever much easier to test
}
}
现在,如果您不能/不会这样做,您必须将此测试视为集成测试。你为它设置数据怎么样?例如插入您想要阅读的行。然后将数据返回到其原始状态。不利的一面是你的测试会变得缓慢而脆弱。