2015-01-27 4 views
0

У меня есть два класса в качестве входных данных и вы хотите издеваться над ними друг с другом. Это используется, чтобы быть очень простым в JMockit, один раз называетсяMocking класс с существующим классом в JMockit (замена для `redefineMethods`)

Mockit.redefineMethods(originalClass, mockingClass); 

Но в версии 0.999 этот метод устаревшим был удален. Мне нужны функции более новой версии JMockit, поэтому я больше не могу использовать старые версии.

Я думаю, из документации в сообщении об устаревании, что использование предлагаемого «современного» способа сделать это было бы определить MockUp<originalClass> и использовать его как mockingClass.

К сожалению, я получаю оба значения в качестве входных параметров во время выполнения (объявлено как class<?>), поэтому создание класса не является вариантом.

Есть ли способ подражать тому, что Mockit.redefineMethods() сделал до версии 0.999, даже если это может быть не самое изящное решение для решения этой проблемы?

EDIT

Что я получаю в качестве входных данных является Map<Class<?>, Class<?>> mockedClasses классов будут издеваться, указывающими на классы насмешливых их. Это затем итерации и передается Mockit:

for (Map.Entry<Class<?>, Class<?>> entry : mockedClasses.entrySet()) { 
    Mockit.redefineMethods(entry.getKey(), entry.getValue()); 
} 

После этого тестовый код выполняется, то насмешки снова отключается, используя restoreOriginalDefinition() вместо redefineMethods() аналогичным образом.

+1

Не уверен, что это то, что вам нужно, но есть конструктор 'MockUp (Class)', который получает класс, который будет издеваться. В противном случае мне нужно будет увидеть пример теста, потому что 'MockUp' предоставляет все, что делало Mockit.redefineMethods в прошлом. –

+0

Спасибо, я попробую завтра. И если мне это не удастся, я попытаюсь приготовить минимальный пример и опубликовать это здесь. – Alfe

+0

С другой стороны, нет, это не работает для меня, извините. У меня уже есть * оба класса, один из которых насмехается и насмехается. Оба являются произвольными и моими вводами (и я не могу легко изменить это). Ни один из них (в настоящее время) не расширяет 'MockUp', и я не могу расширить класс, который я получаю в качестве значения, с помощью' MockUp' (по крайней мере, я не знаю, как это сделать). Но, может быть, есть решения? – Alfe

ответ

1

Хорошо, теперь вопрос яснее. И ответ заключается в том, что нет способа издеваться над классом с другим произвольным классом; вы должны определить класс макета как подкласс MockUp. Очень старый Mockit.redefineMethods(Class, Class) (удаленный от API 4.5+ лет назад) принимал только произвольные классы, потому что этот начальный API также поддерживал Java 1.4 для тестового кода (который больше не поддерживается с 0.999, для которого требуются дженерики и/или аннотации).

+0

Это создает для меня проблему, поскольку мой устаревший код в значительной степени зависит от этой удаленной функции. Я боюсь, что мы сейчас потеряем тестовые материалы или вам придется обновлять каждую из них вручную. Но все равно спасибо! – Alfe

Смежные вопросы