gpt4 book ai didi

java - gradle和junit的间歇性并发失败

转载 作者:行者123 更新时间:2023-12-03 03:12:11 26 4
gpt4 key购买 nike

我创建了一个 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 的 void 方法注解。没有设置或拆卸。为了确保这不是我在做的事情,我将每个测试都更改为 hibernate 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)

最佳答案

似乎使用 gradle 的 junit5 并行测试执行失败并且有一个 ticket为此。

关于java - gradle和junit的间歇性并发失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52770987/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com