0

您好:通常您使用模拟(java 代理)来替换类中的对象。

例如:

public class ClassA{
  public ClassB realObjectB;
  public ClassC realObjectC;


  public void Method1(){
       realObjectC = new ClassC();
       realObjectB =  new ClassB(realObjectC);   
  }     

  ...

  ...   

}

public class ClassB {


      public void ParticularInhereitedMethod(){
          many dependency objects involved...
      }  

} 

当然,ClassB 和 ClassC 还有很多其他的依赖关系,例如连接池。

当我进行测试时,我可以这样做:

 public class Mock extends ClassB{        

 @override  
 public class ParticularInhereitedMethod(){
      Make clean codes, no dependency.
 }

}

在测试应用中:

   public class MainClass{

          public static void main(String[] args){
                  ClassA a = new ClassA();
                  ClassM m = new Mock();
                  a.realObjectB = m; 

                  manipulate m;
          }

   }  

上述方法在实际测试中有效吗?为什么我必须使用 Java 代理(字节码替换)?

4

2 回答 2

2

我建议使用 Mockito http://code.google.com/p/mockito/和 Spring 注入来解决您的问题。

使用mockito tou可以从参数中声明对象的返回参数,使用spring可以在运行时解析对象的实例

于 2012-12-12T15:55:58.113 回答
1

由于您的对象相对复杂,您可能会发现难以模拟/替换。我会寻找以更简单的方式测试它们的方法,并使用依赖注入来允许您在不进行子类化的情况下替换它们的实现。

于 2012-12-12T15:57:00.337 回答