java - 如何模拟下游方法调用?

标签 java junit mocking mockito

我有一个问题,我有一些代码,例如

public void a() { 
    Obj1 one = Obj1();
    Obj2 two = Obj2();
    one.b();
    two.c();
}

我正在尝试调用 a() 方法,并且希望执行 b() 方法,但我想模拟 >c() 方法。

既然 Obj2 2 是在 a() 中声明的,那么最好的方法是什么?

最佳答案

两个选项:

  • 您重新设计您的设计,使其更易于测试。例如,通过摆脱 new Obj2() 调用。相反,您可以将 Obj2 对象的工厂传递给该类;并使用它。工厂返回模拟对象;你很好。或者您研究一下其他依赖注入(inject)机制。
  • 您转向 PowerMock(ito),它允许模拟调用 new;如概述here例如。

我个人的两分钱:我建议选择选项 1 - 改进设计总是更好;而不是使用大的(丑陋的)PowerMock 锤子来“修复”设计问题。因此,一个简单的例子如下:

public class EnclosingClass {
  private final Obj2Factory factory;
  EnclosingClass(Obj2Factory factory) {
    this.factory = factory;
  }
 void a() {
   Ob2 two = factory.make();
 }

关于java - 如何模拟下游方法调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44932666/

相关文章:

java - com.mysql.jdbc.MysqlDataTruncation : Data truncation: Incorrect datetime value: 'Mon Feb 11 00:00:00 IST 2013' for column 'INVOICE_DATE' at row 1

java - 工作经理 : How to return result only when network request is done

java - 在 Webdriver 中创建测试套件

Meteor 的测试实践

objective-c - OCMock 一个类方法用自定义数据回调传递的 block

java - 为什么必须在构造函数完成之前初始化最终变量?

java - Android - 谷歌驱动器 API : how to know when upload task is completed?

java - Java 方法内部调用的 Get 方法

java - 如何使用mockito/powermockito模拟IamRequest impl类?

javascript - 如何为 express.static 模拟 http.ServerResponse 和 http.IncomingMessage