具有setListener(..)的模拟依赖项



我的测试类有一些依赖项。所有这些都提供CCD_ 1作为从它们的非阻塞操作接收通知的方式。

我实现了一个阻塞方法,它聚合了所有非阻塞操作的结果。这意味着我必须使用这样的setListener()方法注册侦听器,并等待回调。

我应该如何在单元测试中模拟/伪造这些依赖关系?我可以对它们进行子类化,实现setListener(),并根据需要触发回调。但假设其中一些dep是final类。另外,我想Mockito可能有什么我可以用的?

概念代码(未测试):

public void blockingMethod() {
  CountDownLatch signal = new CountDownLatch(2);
  dep1.setListener(new Dep1Listener() {
    @Override public onResult(int result) {
      signal.countDown();
    }
  });
  dep1.calculateValue1();
  dep2.setListener(new Dep2Listener() {
    @Override public onResult(int result) {
      signal.countDown();
    }
  });
  dep2.calculateValue2();
  signal.await();
  return combinedResult;
}

我会创建返回固定值的依赖项的具体实现。我不会对现有类进行子类化,而是创建接口的最小实现。如果没有为依赖项定义接口,请创建它们。

模拟可能有效,但测试会更难阅读。一旦一个mock需要抓住一个论点(即你的听众),并在以后用它做点什么,它就会变得具有挑战性。

相关内容

  • 没有找到相关文章