Java Easymock жалуется на «java.lang.IllegalStateException: метод void не может вернуть значение» или «последний вызов мJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Java Easymock жалуется на «java.lang.IllegalStateException: метод void не может вернуть значение» или «последний вызов м

Сообщение Anonymous »

Мы используем EasyMock для тестирования JUnit нашего Java-приложения внутри Eclipse. Используя код, аналогичный приведенному ниже, мы обнаружили странное поведение: при запуске полного набора тестов (Проект Eclipse -> Запуск от имени -> JUnit) один тестовый пример воспроизводимо завершается сбоем. Однако при автономном запуске он работает нормально.

Интерфейс:

Код: Выделить всё

package de.zefiro.java.easymockexception;

public interface Fruit {
public String fall();
}
Тестовый класс:

Код: Выделить всё

package de.zefiro.java.easymockexception;

import static org.easymock.EasyMock.createNiceMock;
import static org.easymock.EasyMock.expect;
import static org.easymock.EasyMock.replay;
import static org.junit.Assert.assertTrue;

import org.junit.BeforeClass;
import org.junit.Test;

public class Newton {
private static final Fruit APPLE = createNiceMock(Fruit.class);

@BeforeClass
public static void SetUpClass() {
expect(APPLE.fall()).andReturn("Targeting HEAD").anyTimes();
replay(APPLE);
}

@Test
public void testGravity() {
String target = APPLE.fall();
assertTrue("Missed", target.contains("HEAD"));
}
}
Набор тестов:

Код: Выделить всё

package de.zefiro.java.easymockexception;

import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses;

@RunWith(value = Suite.class)
@SuiteClasses( { Newton.class } )
public class ScienceTests { }
Выполнение всех тестов в проекте Eclipse, то есть как ScienceTest, вызывающее Newton, так и прямой вызов Newton, привело к этому исключению в приведенном выше небольшом примере:

Код: Выделить всё

java.lang.IllegalStateException: no last call on a mock available
at org.easymock.Easymock.getControlForLastCall(EasyMock.java:175)
Здесь есть аналогичный вопрос, но он, похоже, не связан с этим.

И в нашем реальном тестируемом коде (более крупный класс, но основные актеры идентичны урезанному примеру) это исключение:

Код: Выделить всё

java.lang.IllegalStateException: void method cannot return a value
at org.easymock.internal.MocksControl.andReturn(MocksControl.java:101)
Я не нашел ответа ни в Google, ни здесь, на StackOverflow, но нашел сам сейчас, поэтому, чтобы ответить на ваши собственные вопросы, я опубликую свои выводы ниже. Стоит также упомянуть этот пост, который я нашел, хотя в данном конкретном случае он мне не помог: Сопоставление причинно-следственных исключений EasyMock

Подробнее здесь: https://stackoverflow.com/questions/100 ... thod-canno
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»