如何模拟未实现的依赖注入?

时间:2013-06-10 08:32:10

标签: c# unit-testing nunit rhino-mocks

我想对下面的代码进行单元测试。现在我正在使用NUnit和Rhino Mock。

  

注意:所有NUnit测试用例都不应该执行任何数据库操作

 interface IdbOperation  
 {
      int  insert();
 }

 public class databaseactivity:IdbOperation 
 { 
    public databaseactivity()
    {
      verifyDBConnection(); 
    }

    void verifyDBConnection() 
    { 
      DbManager dbManager=new  DbManager();

      if(dbManager.state()!=True)   
      {
        Throw new DatabaseException();
      }
    }

    public int insert(bo obj)   
    {   
      Serviceclient  serviceClient=new  Serviceclient(); 
      serviceClient.insert(obj);
    }
 }

在上面的代码中,我想为insert方法编写一个单元测试用例。我尝试了很多方法但是无法模拟。所以可以请任何人帮我模拟插入方法.ASAP

您也可以向我推荐任何其他模拟框架。

1 个答案:

答案 0 :(得分:0)

这个怎么样?

public databaseactivity(IDbManager dbManager = null)
{
  DbManager dbManager = dbManager ?? new DbManager();
  // ...
}

如果你需要重新创建实例(就像ServiceclientFactory似乎是这样),你需要注入一个工厂(我会尽量避免这种情况,因为它会使事情变得更复杂):

public databaseactivity(ServiceclientFactory serviceClientFactory = null, /*...*/)
{
  // ...
  this.serviceClientFactory = serviceClientFactory ?? new DefaultServiceClientFactory();
}

public int insert(bo obj)   
{   
  serviceClient = this.serviceClientFactory.CreateServiceClient(); 
  serviceClient.insert(obj);
}