首页 > 解决方案 > 如何使用 Junit/Mockito 模拟存在于外部类中但由内部类使用的 class.method

问题描述

我有一些代码包含一个调用外部类中的依赖项的内部类。使用 mockito 进行测试时,如何模拟内部类中的方法?

@Component
public class ClassA {
  @Autowired private DaoClass daoClass;

  public final ClassB classB = new ClassB();
  protected class ClassB extends ....{
    @Override
    public int execute{
      daoClass.getStuff();
    }
  }
}

在我的单元测试中,如果我做这样的事情

Class ATest{
    @InjectMock
    ClassA classA;
    
    @Mock
    DaoClass daoClass;

    @Before
    public void setup(){
      MockitoAnnotations.initMocks(this);
    }

    @Test
    public void someTest{
      when(daoClass.getStuff()).thenReturn(1);
      int result = classA.classB.execute();
}

当我运行这个测试时,daoClass.getStuff() 总是返回一个空值,看起来模拟不适用于内部类。有什么方法可以让模拟工作?

标签: javajunitmockito

解决方案


推荐阅读