JMockit и передача по ссылке.Один из нас, должно быть, ошибается (и это, вероятно, я!) - PullRequest
2 голосов
/ 09 августа 2011

Я был бы очень признателен, если бы кто-нибудь помог мне разобраться с этой проблемой, с которой я недавно боролся.Я пытаюсь смоделировать метод, который принимает double и Calendar, и возвращает целое число, которое определяется значением Calendar.Определение макета приведено ниже:

new NonStrictExpectations()
    {
        // this is my class to be mocked
        Calculator growthCalc;
        {
            GregorianCalendar month = new GregorianCalendar(2010, 0, 1);

            for (int i = 0; i < 3; i++)
            {
                // mock the "applyInflation" method
                growthCalc.applyInflation(anyDouble, month);
                result = i;

                month = (GregorianCalendar) month.clone();  //AAA
                month.add(Calendar.MONTH, 1);
            }

            growthCalc.toString();
            result = "Mocked Calculator";
        }
    };

Макет настроен (вызов toString () возвращает правильный текст), но метод applyInflation возвращает ноль для всего, кроме последней итерации цикла выше (то есть он возвращает 2, когда вы передаете в месяц новый GregorianCalendar (2010,2,1).

Я пришел к выводу, что строка, помеченная AAA, не дает эффекта, который, я думаю, должен.кажется, что указатель изменяется, чтобы указывать на новую копию «месяца», которую я могу изменить, не влияя на содержание «месяца», установленного ложным ожиданием. Либо это, либо JMockit не записывает ложный образ, как яподумал.

Пожалуйста, помогите! Пожалуйста, скажите мне, где я ошибаюсь. Я действительно хотел бы знать, что здесь происходит, так как либо мое понимание Java в корне неверно, либо реализация JMockit не ведет себя так, как она«должен» (по мне :)).Или я допустил настоящую ошибку школьника, что два вечера не были замечены ...

Спасибо.

1 Ответ

2 голосов
/ 11 августа 2011

Ваш тест совершенно верный. Это происходит только из-за ошибки в JMockit, которую я исправляю сразу. Извините за беспокойство!

...