簡體   English   中英

Spring - 使用 Mock 進行單元測試 - 如何在服務單元測試中模擬自定義收集器

[英]Spring - Unit Test with Mock - How to mock a Custom Collector in a Service unit test

我有一個煩人的問題。

我有一個服務(在 RestController 中使用),它從存儲庫中獲取數據並對獲取的數據進行一些轉換。 我在轉換中使用自定義收集器。 所以它看起來像:

@RestController
class myController() {
    Service myService

    @GetMapping()
    void getResults{
       Collection col = myService.fetch();
       // some file download logic
    }

}

@Service
class myService() {
Repository repository
Collector myCollector

    Collection fetch() {
    return repository
        .getSomeResults()
        .stream()
        .collect(Collectors.groupingBy(someKey, myCollector)
        .values();
    }

}

在這里,當我想對服務方法 fetch() 進行單元測試時,我可以模擬存儲庫,但如果我想模擬自定義收集器,我需要對所有 5 個方法進行存根。 除了finish(),其他的mock都沒什么意義。

我不想減少測試覆蓋率。 我應該如何解決這個問題?

單元測試背后的想法是您以原子方式測試您的方法。 但這並不意味着您必須在內部模擬所有其他方法調用。

比如說,你有一個數據庫調用/網絡調用,模擬它是有意義的。 當被調用方法的響應決定將在被調用方法上執行的分支時,模擬是有意義的。 但在這種情況下,它類似於 mocking a Collectors.toList() 沒有 mocking 在這里沒有壞處。

此外,只要您的自定義收集器有自己的單元測試,這無論如何都不會影響您的覆蓋范圍

暫無
暫無

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

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