我最近开始玩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 以及&#34;失败后的符号&#34;测试仍然是&#34;加载图标&#34;。
调试每个测试用例表明这些点设置正确。从测试中删除断言不会改变任何内容。
有人可以向我解释这种行为吗?
提前致谢
的Egon
编辑:更正了失败的构造函数的版本
答案 0 :(得分:1)
也许它是IntelliJ IDEA中的一个错误。有时候我也面临着这个问题。不幸的是,它(2014-11-24)尚未解决:https://youtrack.jetbrains.com/issue/IDEA-100752
尝试使用备用跑步者运行测试(例如,作为Maven目标)。