Java,实例替换而不是 Mock

标签 java

嗨:通常你使用mock(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代理(字节码替换)?

最佳答案

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

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

关于Java,实例替换而不是 Mock,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13843469/

相关文章:

java - 如何同时使用 toString() 或 print() 等显示两个输出?

java - 减少字符串中的字符数

java - 检测暗窗口任务栏

java - 将形状对象的 ArrayList 绘制到框架

java - 受密码保护的 Excel 文件

java - 如何使用 SolrJ 获取 solr 服务器中所有核心的列表

java - 使用 JpaPagingItemReader 时无法获取基于不同 pageSize 和 ChunkSize 的所有记录

java - volatile Boolean 和 Boolean 的区别

java - 为什么 SimpleDateFormat HH 与 hh 的工作方式不同

java - Cordova, "cordova run android"之后发布