我最近开始玩 tdd 并遇到了一个问题,我不明白为什么一件事有效而另一件事不工作。
以下代码适用于我:
public class Ant {
public Ant(Point startLocation, Point hive) {
this.currentLocation = new Point(startLocation);
this.hive = new Point(hive);
}
public void goHome() {
if (hive.x > currentLocation.x) {
currentLocation.x++;
} else if (hive.x < currentLocation.x){
currentLocation.x--;
}
if (hive.y > currentLocation.y) {
currentLocation.y++;
} else if (hive.y < currentLocation.y){
currentLocation.y--;
}
}
}
对应的测试:
@DataProvider(name = "goneHome")
public static Object[][] goHome() {
return new Object[][] {
{new Point(2,1), new Point(3,2), new Point(7,8)},
{new Point(20,1), new Point(19,2), new Point(7,8)},
{new Point(23,10), new Point(22,9), new Point(7,8)},
{new Point(2,10), new Point(3,9), new Point(7,8)},
{new Point(2,8), new Point(3,8), new Point(7,8)},
{new Point(7,1), new Point(7,2), new Point(7,8)}
};
}
@Test(dataProvider = "goneHome")
public void testGoHome(Point currentPosition, Point nextPosition, Point hive)
throws Exception {
Ant ant = new Ant(currentPosition, hive);
ant.move();
assertEquals(ant.getCurrentLocation(), nextPosition);
}
如果我像这样更改 ant 构造函数,则测试失败:
public Ant(Point startLocation, Point hive) {
this.currentLocation = startLocation;
this.hive = hive;
}
失败是指前两组 DataProvider 的测试正常工作,其余的失败/未完成。虽然我不太确定是什么失败了。如果我删除 DataProvider 中的前两组数据,仍然只有前两个数据集(之前的第 3 和第 4 个数据集)不会失败。
我使用IntelliJ,除了“失败”测试之外的符号仍然是“加载图标”。
调试每个单独的测试用例表明点设置正确。从测试中删除断言不会改变任何东西。
有人可以向我解释这种行为吗?
提前致谢
埃贡
编辑:更正了失败的构造函数版本