#java #eclipse #junit
#java #eclipse #junit
Вопрос:
Я пытаюсь использовать JUnit для тестирования реализации очереди, которую я сделал, но у меня возникла проблема: похоже, JUnit не может найти мои методы тестирования. Кто-нибудь знает, как решить такую проблему?
Для получения дополнительных разъяснений, это проблема, которую поднимает Eclipse
java.lang.NoClassDefFoundError: org/junit/platform/engine/ConfigurationParameters
at org.eclipse.jdt.internal.junit5.runner.JUnit5TestLoader.<init>(JUnit5TestLoader.java:34)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:64)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500)
at java.base/java.lang.reflect.ReflectAccess.newInstance(ReflectAccess.java:128)
at java.base/jdk.internal.reflect.ReflectionFactory.newInstance(ReflectionFactory.java:350)
at java.base/java.lang.Class.newInstance(Class.java:645)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.createRawTestLoader(RemoteTestRunner.java:371)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.createLoader(RemoteTestRunner.java:366)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.defaultInit(RemoteTestRunner.java:310)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.init(RemoteTestRunner.java:225)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:209)
Caused by: java.lang.ClassNotFoundException: org.junit.platform.engine.ConfigurationParameters
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:606)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:168)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
... 13 more
И это также мой тестовый класс.
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import java.lang.String;
import org.junit.Before;
import org.junit.jupiter.api.Test;
public class QueueTest {
private Queue qq;
@Before
public void setUp()
{
qq = new Queue<Integer>();
}
@Test
public void testInitialState()
{
}
@Test
public void testAddElement()
{
}
@Test
public void testHowMany()
{
}
@Test
public void testGetElement()
{
}
@Test
public void testTimings()
{
}
}
Я также попытался изменить версию JUnit с 5 на 4, но ничего не изменилось, может ли проблема быть связана с путем сборки?
Спасибо,
Комментарии:
1. Я не могу воспроизвести это в Eclipse 2020-12. У вас устаревшая версия?
org.junit.Before
является JUnit 4 и должен бытьorg.junit.jupiter.api.BeforeEach
вместо этого. При переключении версии JUnit также обязательно измените в конфигурации запуска JUnit тестовый бегун .2. У меня версия 4.18
3. Версии 4.18 JUnit нет. Вы имеете в виду 4.13?
4. @StefanBirkner Затмение 2020-12 (4.18).
5. исправлена проблема, мой тупица поместил библиотеку в путь к модулю вместо пути к классу, следовательно, почему ClassNotFoundException
Ответ №1:
JUnit 5 разделен на несколько артефактов, в основном API и фактический движок, который запускает тесты. Ошибка, которую вы видите, похоже, указывает на то, что у вас нет доступного движка (или, точнее, платформы, от которой зависит движок). Предполагая, что вы используете Maven, убедитесь, что у вас есть следующие зависимости:
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<scope>test</scope>
</dependency>
Комментарии:
1. Согласно скриншотам, Maven здесь не используется.
2. Блин, я не заметил скриншотов. В этом случае это, вероятно, будет конфигурация IDE, как вы говорите в комментарии.