使用MBUnit针对数据库测试值

时间:2009-10-26 22:59:44

标签: c# unit-testing mbunit gallio

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

1 个答案:

答案 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
     }                  
}

现在,如果您不能/不会这样做,您必须将此测试视为集成测试。你为它设置数据怎么样?例如插入您想要阅读的行。然后将数据返回到其原始状态。不利的一面是你的测试会变得缓慢而脆弱。