Мы используем EasyMock для тестирования JUnit нашего Java-приложения внутри Eclipse. Используя код, аналогичный приведенному ниже, мы обнаружили странное поведение: при запуске полного набора тестов (Eclipse Project -> Run as -> 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, т. е. как ScienceTests, вызывающих 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