JUnit выдает странный AssertionFailedError - PullRequest
0 голосов
/ 28 января 2009

В настоящее время я использую JUnit 4.4 и Java 1.6.x. И после недавнего исправления кода мы начали получать это AssertionFailedError в моих тестах JUnit по методу:

UtilityTest.testParseDate (4t): понедельник, 15 января 09:26:07 PST 2001, ожидается: «понедельник, 15 января 09:26:07 PST 2001», но был: «понедельник, 15 января 09:26:07 PST 2001"

junit.framework.AssertionFailedError: UtilityTest.testParseDate (4t): понедельник, 15 января 09:26:07 PST 2001 ожидается: но было: at UtilityTest.testParseDate (неизвестный источник)

Как вы можете видеть, ожидаемое и фактическое выглядят одинаково, и после нескольких проверок кода мы не можем найти явной ошибки в коде. Тестовые прогоны с фактическими данными также дали правильные (ожидаемые) результаты.

Кто-нибудь видел такое поведение раньше в JUnit, и если да, вы нашли причину и / или исправление?

Я видел то же самое в предыдущих версиях Java и JUnit: всегда несколько случайным, когда это происходит, и обычно единственное исправление, которое «сработало», это перепечатывать кусок кода с нуля. Странно, но это был единственный способ устранить эту ошибку. На этот раз я пытаюсь выяснить что-то более «конкретное» в поведении.

Спасибо

-Ричард

Ответы [ 3 ]

2 голосов
/ 28 января 2009

Можете ли вы опубликовать код для UtilityTest.testParseDate ()?

Используете ли вы assertEquals () для значений даты или сравниваете их по-другому? Если да, можете ли вы утверждать, что отметки времени в миллисекундах равны самим датам?

1 голос
/ 28 января 2009

Тестовый код:

Calendar cal = Calendar.getInstance();
Date today = new Date();
cal.set(2001, 0, 15, 9, 26, 07);  // Jan 15 2001, 09:26:07
// format 4 = ddd mmm dd hh:mm:ss TTT yyyy (with gettime)
assertEquals("UtilityTest.testParseDate(4t): Mon Jan 15 09:26:07 PST 2001", cal.getTime(),  Utility.parseDate("Mon Jan 15 09:26:07 PST 2001", today, true));

Вот как выглядит parseDate (только сигнатура метода, поскольку код был длинным):

public static Date parseDate(String date, Date today, boolean gettime) {

Я думаю, что у вас может быть это, хотя - хотя он не отображает миллисекунды, они будут другими.

0 голосов
/ 28 января 2009

Вот и все - миллисекунды были выключены. Разумное применение cal.clear() решило проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...