在不使用模拟框架的情况下模拟具体类

时间:2017-12-07 20:45:03

标签: java unit-testing mocking java-7

让我先说一下 - 由于害怕引入新的依赖(并且超出我的理解范围),我们不会使用mockito或任何第三方模拟框架。

我们将ConcreteClass作为依赖关系注入下面的class Anew以后的这种依赖关系会进行ServiceProvider查找。我在下面的method测试期间的想法是在ConcreteClass中模拟查找(我们有一个内部框架来执行此操作)并返回所需的提供程序,这些提供程序只是模拟提供程序类。这样,当我创建用于测试的ConcreteClass实例时,我可以注入我的提供者。

然而,在代码审查中,建议是创建具体类的模拟子类并注入它。类似的东西:

public class MockConcreteClass extends ConcreteClass 
{ 
  public void do() { } 
}   

我认为这会破坏单独测试的能力,因为模拟现在直接依赖于源代码,我不觉得这样做很舒服。这是更好的方式吗?想法?

public class A
{
   private final ConcreteClass b;

   public A(ConcreteClass b)
   {
      this.b = b;
   }

   public void method()
   {
     b.do();
   }
}

public class ConcreteClass
{
   public ConcreteClass()
   {
     // Service Provider look up (can be mocked to return the desired providers)
   }

   public void do()
   {
   } 
}

0 个答案:

没有答案
相关问题