我有一个烦人的问题。
我有一个服务(用在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()之外,其他都没有意义。
我不想减少测试范围。 我应该如何解决这个问题?
答案 0 :(得分:3)
单元测试背后的想法是您原子地测试您的方法。但这并不意味着您将必须模拟其中的所有其他方法调用。
说,您有一个数据库调用/网络调用,模拟它很有意义。当您的被调用方法的响应确定将在您的被调用方法上执行的分支时,可以进行模拟。但是在这种情况下,它类似于模拟Collectors.toList()
。在这里不嘲笑没有害处。
此外,只要您的自定义收集器具有自己的单元测试,这也就不会影响您的覆盖范围