Java 肯特·贝克(Kent Beck';s TDD示例
因此,我在Kent Beck的《通过示例进行测试驱动的开发》一书中研究了Money示例,并且在他编写的最后一个测试之前,我一直能够使代码正常工作:Java 肯特·贝克(Kent Beck';s TDD示例,java,unit-testing,tdd,Java,Unit Testing,Tdd,因此,我在Kent Beck的《通过示例进行测试驱动的开发》一书中研究了Money示例,并且在他编写的最后一个测试之前,我一直能够使代码正常工作: @Test public void testPlusSameCurrencyReturnsMoney(){ Expression sum = Money.dollar(1).plus(Money.dollar(1)); assertTrue(sum instanceof Money); } 这是它调用的函数 public Expre
@Test
public void testPlusSameCurrencyReturnsMoney(){
Expression sum = Money.dollar(1).plus(Money.dollar(1));
assertTrue(sum instanceof Money);
}
这是它调用的函数
public Expression plus(Expression addend) {
return new Sum(this, addend);
}
当我运行它时,它会给出
java.lang.AssertionError
,所以我的问题是它为什么会给出这个错误,以及如何修复它?您正在检查sum
变量是否是Money
,但在plus
方法中返回一个sum
因此,除非Sum
是Money
的子类,否则该断言将始终失败
要使其通过,您可能需要执行以下操作:
public Expression plus(Expression addend) {
return new Money(...<whatever>...);
}
public Expression plus(表达式加数){
归还新钱(……);
}
当然,Money
也必须是一个表达式
或者,您可能想计算总和
,从中获取资金。或者甚至可以做sum的sum instanceof sum
。这取决于你真正想要达到的行为
顺便说一句,Lunivore已经回答了如何解决这个问题,但是我认为如果你想了解更多关于Beck试图传达的内容,你应该在代码块(和测试)前后重新阅读这一段 最后一句话是“这是我们需要修改的代码:”。该代码块首先在第75页输入(带有测试用例)。第79页的最终效果没有任何变化。这只是一个迹象,表明我们可以改变什么,如果我们想保持这个测试 “当且仅当论点是金钱时,没有明显的、干净的方法来检查论点的通俗性。实验失败了,我们删除了测试,然后离开。” 他还表示,这项测试很难看,并在下一页得出结论:“尝试了一个简短的实验,但没有成功就放弃了。”
我写这篇文章是为了防止你认为所有的例子都有效并且应该保留。你有关于这个异常的堆栈跟踪吗?
Expression
extendMoney
?@TomaszNurkiewicz没有表达式是一个包含以下行的接口:“Money reduce(Bank-Bank,String-to);表达式加(表达式加数);表达式时间(整数倍);'@StuperUser我不知道如何得到它,但是单元测试只是在assertTrue(…)行停止,它只是显示断言错误。