我是TDD的新手,我遇到了一个问题。据我所知,TDD中的所有测试都应该在生产代码准备好之前失败。我开发了以下代码:
汽车界面:
public interface CarOperations{
/**
* Return current car speed in km/h
*/
public int currentSpeed();
}
汽车班:
public class Car implements CarOperations{
@Override
public int currentSpeed() {
// TODO Auto-generated method stub
return 0;
}}
JUnit测试:
@Test
public void testInitSpeed() {
Car car = new Car();
assertEquals(0, car.currentSpeed());
}
所以我希望这个测试会失败,因为在开发任何生产代码之前每个TDD测试都会失败,但由于int默认值,这个测试将通过。我可以将方法的返回类型更改为Integer并接收NULL值,但我想知道在这种情况下如何处理原语?也许我的考试错了?
答案 0 :(得分:3)
我不认为这样一个微不足道的案例是一个问题,因为很明显,如果你不返回0,测试将失败。现在,如果您确实想要确认测试可能失败,您可以return -1;
。
答案 1 :(得分:1)
实际上,当您首先编写测试时,不应该定义一个类或属性。这意味着应用程序无法编译,因为测试失败。然后,您只是不将init值分配给字段,test将再次失败。
P.S:测试类型的默认值(例如0为int,对于String等为null)有点无意义。
答案 2 :(得分:0)
您可以抛出异常(例如NotImplementedException),而不是返回默认值(原语或非原语)。这样,您的测试将始终失败。