簡體   English   中英

具有setListener(...)的模擬依賴項

[英]Mocking dependency that has setListener(…)

我正在測試的課程有一些依賴關系。 所有這些都提供setListener()作為從其非阻塞操作接收通知的一種方式。

我實現了一種阻塞方法,該方法匯總了所有非阻塞操作的結果。 這意味着我必須使用此類setListener()方法注冊偵聽器,然后等待回調。

如何在單元測試中模擬/偽造這些依賴項? 我可以將它們子類化並實現setListener()並根據需要觸發回調。 但是,可以說其中一些部門是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;
}

我將創建返回固定值的依賴項的具體實現。 我不會繼承現有類,而是創建接口的最小實現。 如果您沒有為依賴項定義接口,請創建它們。

模擬可能會起作用,但測試將更難閱讀。 一旦模擬需要保留一個參數(即您的聽眾)並在以后對其進行處理,就變得很有挑戰性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM