我需要测试一个返回值取决于数据库值的类。我可以在单元测试中访问数据库,但这些值可能会改变。有没有标准的解决方案?
问问题
268 次
1 回答
4
标准答案是重新设计你的类,这样你就可以模拟出依赖关系。这通常是通过将您的数据源作为接口注入到您的类中来完成的。
例如,您可能有一个行为如下所示的类
class John
{
public John() { }
public void Load()
{
// call to db in here e.g SQLCommand
}
}
负载取决于 SQLCommand,因此您始终需要为此调用 db
如果您注入数据源接口,您将拥有更大的灵活性
例如
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
}
}
现在,如果您不能/不会这样做,则必须将此测试视为集成测试。你为它设置数据怎么样。例如插入您要阅读的行。然后将数据恢复到原始状态。不利的一面是您的测试将缓慢而脆弱。
于 2009-10-26T23:19:23.970 回答