Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 肯特·贝克(Kent Beck';s TDD示例_Java_Unit Testing_Tdd - Fatal编程技术网

Java 肯特·贝克(Kent Beck';s TDD示例

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

因此,我在Kent Beck的《通过示例进行测试驱动的开发》一书中研究了Money示例,并且在他编写的最后一个测试之前,我一直能够使代码正常工作:

@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
extend
Money
?@TomaszNurkiewicz没有表达式是一个包含以下行的接口:“Money reduce(Bank-Bank,String-to);表达式加(表达式加数);表达式时间(整数倍);'@StuperUser我不知道如何得到它,但是单元测试只是在assertTrue(…)行停止,它只是显示断言错误。