Получение исключения ClassNotFoundException при запуске теста с помощью Gradle и jUnitJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Получение исключения ClassNotFoundException при запуске теста с помощью Gradle и jUnit

Сообщение Anonymous »

Я новичок в Gradle и пытаюсь запустить простой сценарий сборки. Я добавил два класса: src/main/java/ExampleApp и src/test/java/ExampleTest в дерево каталогов проекта:

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

│
└───src
├───main
│   └───java
│           ExampleApp.java
│
└───test
└───java
ExampleTest.java
Мой build.gradle.kts:

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

plugins {
java
id("jvm-test-suite")
}

repositories {
mavenCentral()
}

tasks.named("jar") {
manifest {
attributes["Main-Class"] = "ExampleApp"
}
}

testing {
suites {
val test by getting(JvmTestSuite::class) {
useJUnitJupiter()
}
}
}

dependencies {
testImplementation("org.junit.jupiter:junit-jupiter-api:5.9.0")
testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.9.0")
}
Бег

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

./gradlew clean test
тестовое задание не выполнено. В отчете об испытаниях я нашел следующее:

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

org.gradle.api.internal.tasks.testing.TestSuiteExecutionException: Could not execute test class 'ExampleTest'.
at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:54)
at java.base@21.0.1/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
at java.base@21.0.1/java.lang.reflect.Method.invoke(Method.java:580)
at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33)
at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94)
at jdk.proxy1/jdk.proxy1.$Proxy2.processTestClass(Unknown Source)
at org.gradle.api.internal.tasks.testing.worker.TestWorker$2.run(TestWorker.java:176)
at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:129)
at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:100)
at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:60)
at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56)
at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:113)
at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:65)
at app//worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69)
at app//worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74)
Caused by: org.gradle.internal.UncheckedException: java.lang.ClassNotFoundException: ExampleTest
at org.gradle.internal.UncheckedException.throwAsUncheckedException(UncheckedException.java:68)
at org.gradle.internal.UncheckedException.throwAsUncheckedException(UncheckedException.java:41)
at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.loadClass(JUnitPlatformTestClassProcessor.java:170)
at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.access$100(JUnitPlatformTestClassProcessor.java:62)
at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.execute(JUnitPlatformTestClassProcessor.java:104)
at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.execute(JUnitPlatformTestClassProcessor.java:94)
at org.gradle.api.internal.tasks.testing.junit.AbstractJUnitTestClassProcessor.processTestClass(AbstractJUnitTestClassProcessor.java:60)
at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:52)
...  16 more
Caused by: java.lang.ClassNotFoundException: ExampleTest
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:534)
at java.base/java.lang.Class.forName(Class.java:513)
at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.loadClass(JUnitPlatformTestClassProcessor.java:168)
... 21 more
Найденное мной дерево классов:

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

│
├───build
│   ├───classes
│   │   └───java
│   │       ├───main
│   │       │       ExampleApp.class
│   │       │
│   │       └───test
│   │               ExampleTest.class
С Maven все работает как положено. Те же классы, та же структура. С jUnit4 результаты те же.
Что я пропустил в Gradle?
P.S. Windows 11, JDK 21, Gradle 8.6
P.P.S. Я клонировал образец jUnit5 и попытался протестировать. У меня такая же ошибка:

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

java.lang.ClassNotFoundException: com.example.project.CalculatorTests
Похоже, что-то не так с путем к классам при тестировании.
Обновление: запустился на macOS, и все работает как положено!

Подробнее здесь: https://stackoverflow.com/questions/780 ... -and-junit
Ответить

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

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

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

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

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