【问题标题】:How to mock protected variable in super class using Mockito如何使用 Mockito 在超类中模拟受保护的变量
【发布时间】:2022-11-09 21:48:45
【问题描述】:

我有一个父类ClassA。

public class ClassA{
  protected EntityClass entity;
}

这是我的子班ClassB。

public class ClassB extends ClassA {
   public String someMethod(String input) {
      return entity.execute(input);
   }
}

实体类是 -

public class EntityClass {
  public String execute(String input) {
     return "execute";
  }
}

在测试类中,我想测试 ClassB 中的 someMethod(input) 方法。为此,我想模拟方法调用 entity.execute(input)。

我完全是 TestNG 和 Mockito 的初学者。谁能帮助我如何做到这一点?

【问题讨论】:

  • 你如何初始化protected EntityClass entity;
  • 仅供参考 - 对于较大的项目,您很可能希望注入 EntityClass 的实例。这将允许您注入该类的模拟实例,然后执行该方法。

标签: java mockito


【解决方案1】:

最简单的解决方案,在测试级别再定义一个子类,即在它自己的测试用例中,并在构造函数中注入模拟或间谍。然后您可以执行测试,例如:

public static class EntityClass {
    public String execute(String input) {
        return "execute";
    }
}

public static class ClassA {
    protected EntityClass entity;
    public ClassA(EntityClass entity) {
        this.entity = entity;
    }
    public ClassA() {
        this( new EntityClass() );
    }
}

public static class ClassB extends ClassA {
    
    public String someMethod(String input) {
        return entity.execute(input);
    }
}

public static class ClassBSpyed extends ClassB {
    private ClassBSpyed() {
        super( Mockito.mock(EntityClass.class) );
        Mockito.doReturn("SpyedResult").when(this.entity).execute(Mockito.anyString());
    }
}

@Test
public void shouldCallMocked() throws Exception {
    ClassBSpyed spy = new ClassBSpyed();
    assertEquals("SpyedResult",  spy.someMethod("LoremIpsum"));
}

【讨论】:

    猜你喜欢
    • 2010-09-30
    • 1970-01-01
    • 2021-11-16
    • 2016-03-09
    • 1970-01-01
    • 1970-01-01
    • 2014-05-14
    • 2013-07-23
    • 1970-01-01
    相关资源
    最近更新 更多