我已经开始阅读Spring in Action一书了.
我不知道JUnit,我认为我的疑问是关于.
作者提到了一个代码片段,并说它很难测试:
package com.springinaction.knights;
public classDamselRescuingKnight implements Knight {
private RescueDamselQuest quest;
public DamselRescuingKnight() {
quest = new RescueDamselQuest();
}
public voidembarkOnQuest() throwsQuestException {
quest.embark();
}
}
Run Code Online (Sandbox Code Playgroud)
作者说:
为DamselRescuingKnight编写单元测试非常困难.在这样的测试中,你希望能够断言在调用骑士的embarkOnQuest()时调用任务的embark()方法.但是在这里没有明确的方法来实现这一目标.不幸的是,DamselRescuingKnight仍未经过测试.
作者的意思是什么?
为什么这里的代码难以测试?
我最初的想法是很难测试,因为"RescureDamselQuest"对象在构造函数中初始化.这使得例如插入模拟对象变得困难.模拟对象可以帮助您测试在"RescueDamselQuest"对象上调用embark()方法.
解决这个问题的更好方法是在构造函数中包含一个参数(通常我更喜欢这个方法):
public DamselRescuingKnight(RescueDamselQuest quest){
this.quest = quest;
}
Run Code Online (Sandbox Code Playgroud)
或者添加一个setter:
public void setDamselRescuingKnight(RescueDamselQuest quest){
this.quest = quest;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
150 次 |
| 最近记录: |