прерывистые одновременные сбои с gradle и junit - PullRequest
0 голосов
/ 12 октября 2018

Я создал тестовый класс JUnit и провел его с Gradle, и жизнь была хорошей.

Я создал другой тестовый класс JUnit в другом пакете, выполнил ту же команду Gradle, и теперь жизнь стала хуже.Хуже всего то, что время от времени это только хуже.

Иногда все работает:

$ gradle clean cleanTest test

> Task :product:java:common:test

package1.DataSourceDetailsUtilsTest > onlyOverrides() PASSED
package1.DataSourceDetailsUtilsTest > onlyDefaults() PASSED
package1.DataSourceDetailsUtilsTest > onlyTenant() PASSED
package1.DataSourceDetailsUtilsTest > package2.UUIDServiceTests.test1() PASSED
package1.DataSourceDetailsUtilsTest > package2.UUIDServiceTests.test2() PASSED
package1.DataSourceDetailsUtilsTest > package2.UUIDServiceTests.test3() PASSED
package1.DataSourceDetailsUtilsTest > package2.UUIDServiceTests.test4() PASSED
package1.DataSourceDetailsUtilsTest > package2.UUIDServiceTests.test5() PASSED
package1.DataSourceDetailsUtilsTest > package2.UUIDServiceTests.test6() PASSED
package1.DataSourceDetailsUtilsTest > package2.UUIDServiceTests.test7() PASSED

BUILD SUCCESSFUL in 3s
21 actionable tasks: 5 executed, 16 up-to-date

Даже в этом случае обратите внимание, что левая сторона всегда package1.DataSourceDetailsUtilsTest, хотя это только 1 изтестовые классы.

Иногда тесты не выполняются:

> Task :product:java:common:test FAILED

package1.DataSourceDetailsUtilsTest > onlyOverrides() PASSED
package1.DataSourceDetailsUtilsTest > onlyDefaults() PASSED
package1.DataSourceDetailsUtilsTest > onlyTenant() PASSED
package2.UUIDServiceTests > initializationError FAILED
    java.lang.AssertionError

4 tests completed, 1 failed

FAILURE: Build failed with an exception.

Обратите внимание, как левая часть правильно переходит от package1.DataSourceDetailsUtilsTest к package2.UUIDServiceTests.Это то, что я ожидал.Ошибка AssertionError вставляется внизу этого поста.

Иногда тесты не выполняются по-разному:

> Task :product:java:common:test FAILED

package1.DataSourceDetailsUtilsTest > package2.UUIDServiceTests.test1() PASSED
package1.DataSourceDetailsUtilsTest > onlyTenant() PASSED
package1.DataSourceDetailsUtilsTest > onlyOverrides() PASSED
package1.DataSourceDetailsUtilsTest > onlyDefaults() PASSED
package1.DataSourceDetailsUtilsTest > package2.UUIDServiceTests.test2() SKIPPED
package1.DataSourceDetailsUtilsTest > package2.UUIDServiceTests.test3() SKIPPED
package1.DataSourceDetailsUtilsTest > package2.UUIDServiceTests.test4() SKIPPED                                                                                                                                                                   
Received a completed event for test with unknown id '40.9'. Registered test ids: '[:product:java:common:test, 40.1]'
java.lang.IllegalArgumentException: Received a completed event for test with unknown id '40.9'. Registered test ids: '[:product:java:common:test, 40.1]'
    at org.gradle.api.internal.tasks.testing.results.StateTrackingTestResultProcessor.completed(StateTrackingTestResultProcessor.java:79)
    at org.gradle.api.internal.tasks.testing.results.AttachParentTestResultProcessor.completed(AttachParentTestResultProcessor.java:56)
    at sun.reflect.GeneratedMethodAccessor284.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
    at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
    at org.gradle.internal.dispatch.FailureHandlingDispatch.dispatch(FailureHandlingDispatch.java:29)
    at org.gradle.internal.dispatch.AsyncDispatch.dispatchMessages(AsyncDispatch.java:133)
    at org.gradle.internal.dispatch.AsyncDispatch.access$000(AsyncDispatch.java:34)
    at org.gradle.internal.dispatch.AsyncDispatch$1.run(AsyncDispatch.java:73)
    at org.gradle.internal.operations.CurrentBuildOperationPreservingRunnable.run(CurrentBuildOperationPreservingRunnable.java:42)
    at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
    at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
    at java.lang.Thread.run(Thread.java:748)
Received a completed event for test with unknown id '40.7'. Registered test ids: '[:product:java:common:test, 40.1]'
java.lang.IllegalArgumentException: Received a completed event for test with unknown id '40.7'. Registered test ids: '[:product:java:common:test, 40.1]'
    at org.gradle.api.internal.tasks.testing.results.StateTrackingTestResultProcessor.completed(StateTrackingTestResultProcessor.java:79)
    at org.gradle.api.internal.tasks.testing.results.AttachParentTestResultProcessor.completed(AttachParentTestResultProcessor.java:56)
    at sun.reflect.GeneratedMethodAccessor284.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
    at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
    at org.gradle.internal.dispatch.FailureHandlingDispatch.dispatch(FailureHandlingDispatch.java:29)
    at org.gradle.internal.dispatch.AsyncDispatch.dispatchMessages(AsyncDispatch.java:133)
    at org.gradle.internal.dispatch.AsyncDispatch.access$000(AsyncDispatch.java:34)
    at org.gradle.internal.dispatch.AsyncDispatch$1.run(AsyncDispatch.java:73)
    at org.gradle.internal.operations.CurrentBuildOperationPreservingRunnable.run(CurrentBuildOperationPreservingRunnable.java:42)
    at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
    at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
    at java.lang.Thread.run(Thread.java:748)

package2.UUIDServiceTests > initializationError FAILED

java.lang.AssertionError
    Caused by: java.lang.AssertionError

8 tests completed, 1 failed, 3 skipped

Опять же, обратите внимание, что левая сторона равна package1.DataSourceDetailsUtilsTest, даже если тест из package2.UUIDServiceTests запускается первым.

Это не редкое явление.Около 40% времени, которое они проходят, около 40% времени, когда они терпят неудачу первым способом, и около 20% времени, когда они терпят неудачу вторым способом

Тестовые классы очень просты.Только пустые методы с аннотацией @Test.Никаких настроек или сносов.Чтобы убедиться, что я ничего не делаю, я буквально перевел каждый тест на 1 секунду: Thread.sleep(1000); и все еще могу воспроизвести проблему.Кажется, он всегда работает, когда есть только один тестовый класс (то есть, если я закомментирую один из классов)

После еще одного исследования у меня будет junit.jupiter.execution.parallel.enabled=true, и если я изменю его на false,затем все снова работает, поэтому я полагаю, что Gradle выполняет задание на параллелизм.

Это не поддерживается?

Ошибка AssertionError для первого сбоя:

java.lang.AssertionError
at org.gradle.api.internal.tasks.testing.results.AttachParentTestResultProcessor.started(AttachParentTestResultProcessor.java:33)
at org.gradle.api.internal.tasks.testing.junit.TestClassExecutionEventGenerator.started(TestClassExecutionEventGenerator.java:85)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
at org.gradle.internal.actor.internal.DefaultActorFactory$BlockingActor.dispatch(DefaultActorFactory.java:122)
at org.gradle.internal.actor.internal.DefaultActorFactory$BlockingActor.dispatch(DefaultActorFactory.java:97)
at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
at com.sun.proxy.$Proxy2.started(Unknown Source)
at org.gradle.api.internal.tasks.testing.junit.GenericJUnitTestEventAdapter.testStarted(GenericJUnitTestEventAdapter.java:54)
at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestExecutionListener.executionStarted(JUnitPlatformTestExecutionListener.java:78)
at org.junit.platform.launcher.core.TestExecutionListenerRegistry$CompositeTestExecutionListener.lambda$executionStarted$2(TestExecutionListenerRegistry.java:72)
at java.util.ArrayList.forEach(ArrayList.java:1257)
at org.junit.platform.launcher.core.TestExecutionListenerRegistry.notifyTestExecutionListeners(TestExecutionListenerRegistry.java:51)
at org.junit.platform.launcher.core.TestExecutionListenerRegistry.access$100(TestExecutionListenerRegistry.java:27)
at org.junit.platform.launcher.core.TestExecutionListenerRegistry$CompositeTestExecutionListener.executionStarted(TestExecutionListenerRegistry.java:72)
at org.junit.platform.launcher.core.ExecutionListenerAdapter.executionStarted(ExecutionListenerAdapter.java:46)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:92)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:71)
at org.junit.platform.engine.support.hierarchical.ForkJoinPoolHierarchicalTestExecutorService$ExclusiveTask.compute(ForkJoinPoolHierarchicalTestExecutorService.java:169)
at java.util.concurrent.RecursiveAction.exec(RecursiveAction.java:189)
at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
at java.util.concurrent.ForkJoinTask.doJoin(ForkJoinTask.java:389)
at java.util.concurrent.ForkJoinTask.join(ForkJoinTask.java:719)
at org.junit.platform.engine.support.hierarchical.ForkJoinPoolHierarchicalTestExecutorService.joinConcurrentTasksInReverseOrderToEnableWorkStealing(ForkJoinPoolHierarchicalTestExecutorService.java:146)
at org.junit.platform.engine.support.hierarchical.ForkJoinPoolHierarchicalTestExecutorService.invokeAll(ForkJoinPoolHierarchicalTestExecutorService.java:120)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:110)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:72)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:95)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:71)
at org.junit.platform.engine.support.hierarchical.ForkJoinPoolHierarchicalTestExecutorService$ExclusiveTask.compute(ForkJoinPoolHierarchicalTestExecutorService.java:169)
at java.util.concurrent.RecursiveAction.exec(RecursiveAction.java:189)
at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
at java.util.concurrent.ForkJoinTask.doJoin(ForkJoinTask.java:389)
at java.util.concurrent.ForkJoinTask.join(ForkJoinTask.java:719)
at org.junit.platform.engine.support.hierarchical.ForkJoinPoolHierarchicalTestExecutorService.joinConcurrentTasksInReverseOrderToEnableWorkStealing(ForkJoinPoolHierarchicalTestExecutorService.java:146)
at org.junit.platform.engine.support.hierarchical.ForkJoinPoolHierarchicalTestExecutorService.invokeAll(ForkJoinPoolHierarchicalTestExecutorService.java:120)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:110)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:72)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:95)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:71)
at org.junit.platform.engine.support.hierarchical.ForkJoinPoolHierarchicalTestExecutorService$ExclusiveTask.compute(ForkJoinPoolHierarchicalTestExecutorService.java:169)
at java.util.concurrent.RecursiveAction.exec(RecursiveAction.java:189)
at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)

1 Ответ

0 голосов
/ 12 октября 2018

Похоже, что параллельное выполнение теста junit5 с gradle завершается неудачно, и для этого есть тикет .

...