May 2025
Intermediate to advanced
424 pages
6h 12m
Chinese
本作品已使用人工智能进行翻译。欢迎您提供反馈和意见:translation-feedback@oreilly.com
Mocks 是将面向对象代码与其生产依赖关系解耦的常用技术。 Kotlin 中是否有更好的解决方案?
是第 16 章的后续章节。在该章中,我们看到测试使用了 mock,因为它们必须实现两个多方法接口,尽管其中大部分方法并没有被使用。我们进行了重构,将对多方法接口的依赖替换为对实际需要执行任务的两个操作的依赖。不过,测试仍然对整个接口进行 mock,然后将所需方法的引用传递给被测对象 (Recommendations) :
publicclassRecommendationsTests{privatefinalDistanceCalculatordistanceCalculator=mock(DistanceCalculator.class);privatefinalFeaturedDestinationsfeaturedDestinations=mock(FeaturedDestinations.class);privatefinalRecommendationsrecommendations=newRecommendations(featuredDestinations::findCloseTo,distanceCalculator::distanceInMetersBetween);...}
这些测试对givenFeaturedDestinationsFor 和givenADistanceBetween 方法背后的模拟进行了抽象:
@Testpublicvoidreturns_recommendations_for_single_location(){givenFeaturedDestinationsFor(paris,List.of(eiffelTower,louvre));givenADistanceBetween(paris,eiffelTower,5000);givenADistanceBetween(paris,louvre,1000);assertEquals(List.of(newFeaturedDestinationSuggestion(paris,louvre,1000),newFeaturedDestinationSuggestion(paris,eiffelTower,5000)),recommendations.recommendationsFor(Set.of(paris)));}
以下是givenADistanceBetween 的实现:
privatevoidgivenADistanceBetween(Locationlocation,FeaturedDestinationdestination,intresult ...
Read now
Unlock full access