【发布时间】:2015-11-30 23:21:28
【问题描述】:
我错误地循环了一个 FreeEvent 对象列表,该列表由一个字符串和一个相应的枚举组成。
private List<FreeEvent> freeEvents = new ArrayList<FreeEvent>();
我的 JUnit 测试给出以下错误,这是不言自明的:
org.junit.ComparisonFailure:预期:万圣节之夜[1:免费万圣节之夜 2:免费万圣节之夜 3:免费],但原为:万圣节之夜[3:免费]
我了解错误是什么,但我不确定如何修复循环以使其记住循环通过的所有值。
public String displayFreeEvents() {
String name = null;
EventType type = null;
for (int i = 0; i < freeEvents.size(); i++) {
name = freeEvents.get(i).getEventName();
type = freeEvents.get(i).getEventType();
}
String event = name + ": " + type;
return event;
}
测试用例
public void testDisplayFreeEvents() {
EventHistory eventHistory = new EventHistory();
FreeEvent event1 = new FreeEvent("Halloween Evening1",EventType.FREE);
FreeEvent event2 = new FreeEvent("Halloween Evening2",EventType.FREE);
FreeEvent event3 = new FreeEvent("Halloween Evening3",EventType.FREE);
eventHistory.addFreeEvent(event1);
eventHistory.addFreeEvent(event2);
eventHistory.addFreeEvent(event3);
assertEquals("Halloween Evening1: FREE"+"\n"+"Halloween Evening2: FREE"+"\n"+"Halloween Evening3: FREE"+"\n",eventHistory.displayFreeEvents());
}
【问题讨论】:
-
你能发布你的测试用例吗?
-
您正在迭代,但直到
for循环之后才对name和type执行任何操作,因此它们具有来自freeEvents.get(freeEvents.size()-1)的最后一个值。 -
我也没有看到换行符发生,尽管在断言中你期望它与
\n -
通常最好使用 System.lineSeparator 而不是 "\n"。