Easymock с помощью ожидания даты

Я дразню метод с easymock, который имеет дату в ее теле, чем-то вроде этого:

public void testedMethod() {
    ...
    if (doSomething(new Date())) {
    ...
}

И мой тест похож на это:

public void testThatMethod() {
    ...
    expect(testedClass.testedMethod(new Date())).andReturn(false);
    ...
}

Но когда я иногда запускаю тест, я получаю ошибку как это:

Неожиданный вызов метода testedMethod (четверг Jan 28 9:45:13 GMT-03:00 2010): testedMethod (четверг Jan 28 9:45:13 GMT-03:00 2010): ожидаемый: 1, фактический: 0

Я думаю, что это - потому что иногда дата имеет немного различие. Я попробовал некоторые гибкие ожидания без успеха. Существует ли способ обойти это?

6
задан lcuz 30 January 2010 в 13:49
поделиться

3 ответа

Остановитесь использование новой даты (), вместо этого используйте календарь с постоянным временем.

//Declare the Calendar in your test method
Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(0l);

//receive the calendar to be used in testedClass constructor
public void testedMethod() {
    ...
    if (doSomething(cal.getTime())) {
    ...
}

//use the same calendar to make the assertion
public void testThatMethod() {
    ...
    expect(testedClass.(testedMethod(cal.getTime())).andReturn(false);
    ...
}
4
ответ дан 8 December 2019 в 16:02
поделиться

Если вы можете точно понять, почему он не удается, вы можете написать собственный сопоставитель, чтобы быть более гибким при сопоставлении даты. Смотрите раздел на сопоставителях http://easymock.org/easymock2_2_documentation.html

2
ответ дан 8 December 2019 в 16:02
поделиться

Что делать, если кнопка не будет немедленно отключена, а будет отложена через setTimeout? Ваша функция «disable» вернется, и отправка продолжится.

-121--1016500-

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

<StackPanel Margin=",10,,">

К сожалению, эта возможность не существует по умолчанию в WPF, и это обидно, потому что она требует от разработчиков жесткого кода известных значений по умолчанию путь, что впоследствии усложняет оформление или тематику приложения.

Лучшее решение, которое я могу придумать на данном этапе - это использование конвертера, но количество дополнительного кода, которое вы должны произвести, чтобы представить это, не является идеальным.

-121--1139804-

Возможно, миллисекундная часть дат отличается. Вероятно, необходимо обнулить значение с помощью Calendar.set () перед созданием объекта даты:

Calendar myCalendar = Calendar.getInstance();
myCalendar.set(Calendar.MILLISECOND, 0);
Date testDate = myCalendar.getTime();

Но это предположение:)

2
ответ дан 8 December 2019 в 16:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: