3

我需要测试一个返回值取决于数据库值的类。我可以在单元测试中访问数据库,但这些值可能会改变。有没有标准的解决方案?

4

1 回答 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 回答