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 - 为什么 Python 在多处理或多线程应用程序中并不比 Java 更好?

java - 让一个简单的 envers 示例工作起来很困难 : problem #34

java - RESTful 与基于 SOAP 的 Web 服务?

java - Thymeleaf + Bootstrap 配置

c# - 模拟的移动方法?

java - 在 Eclipse 中运行 Junit 5 所需的最低 Maven 依赖项是什么?

java - 不同情况下的jUnit相同异常

java - 为 JUnit 创建自己的 @Test 注释

java - 使用许多模拟对象创建测试?

unit-testing - grails 2.0.1 单元测试 NullPointerException 保存