【发布时间】:2020-03-11 09:16:27
【问题描述】:
是否有任何指导方针(或最佳实践)来整理以下内容?
我有以下方法可以测试:
fun findProfileByPersonalInfo(personInfo: PersonalInfo): Profile? {
localProfileRepository.findByPersonalInfo(personalInfo)?.let {
return it
}
val searchParams = RemoteProfileSearchParameters()
//... Some mapping from personalInfo to searchParams
remoteProfileRepository.findRemoteProfile(searchParams)?.let {
val profile = profileFactory.create(remoteProfile)
return save(profile)
}
return null
}
当我开始为这个函数编写单元测试时,我意识到:
- 测试线
val profile = profileFactory.create(remoteProfile)既简单又方便,因为我可以模拟此调用的结果并分别测试从remoteProfile到profile的映射。有了这个,如果我改变映射的逻辑,我不会破坏我对findProfileByPersonalInfo的测试,这很好。 - 反之亦然,如果
personalInfo到searchParams的映射逻辑属于findProfileByPersonalInfo,感觉不太对也很难维护。
问题是:
- 是否可以(几乎)总是将实例化逻辑从被测函数中移出,以使其更易于测试和维护?毫无疑问,唯一的职责是实例化对象的函数是个例外。
- 为每个属于上述情况的对象创建某种类型的工厂是不是太过分了?系统的整体设计似乎因此受到影响。
非常感谢任何对最佳实践或讨论的引用。非常感谢你!
【问题讨论】:
标签: java unit-testing testing kotlin