gpt4 book ai didi

java - 如何使用 Gradle java 插件将 "illegal-access=deny"传递给单元测试的 JVM 参数?

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

我有一个测试,当我使用 JVM 参数运行它时,它正确地失败并显示 InaccessibleObjectException --illegal-access=deny在 Eclipse 中。当我运行 gradle check 时,我希望它以同样的方式失败.

我尝试了来自 How to pass args to JVM which runs tests with Gradle 的解决方案:

# build.gradle
apply plugin: 'java'

test {
jvmArgs '--illegal-access=deny'

# also tried
# jvmArgs('--illegal-access', 'deny')
# jvmArgs '-Dillegal-access=deny'
}

测试通过而不是失败。我确实看到测试说它们很脏,因为 jvmArgs 已更改。

这是失败的 JUnit 测试。抱歉,它没有设置“expectedException”,但是在使用 --illegal-access=deny 运行时确实会抛出异常来自 Eclipse。
import static org.junit.Assert.fail;

import java.lang.reflect.Field;

import org.junit.Test;


public class IllegalAccessTest {
@Test
public void testIllegalAccess() throws NoSuchFieldException, SecurityException {
Field libraries = ClassLoader.class.getDeclaredField("loadedLibraryNames");
System.out.println("About to set accessible");
libraries.setAccessible(true);
fail("Should fail before getting here when run with --illegal-access=deny");
}
}

使用 Gradle 运行时此测试的输出显示 -Dillegal-access=deny正在传递给 Gradle,只是不会导致测试失败:
Starting process 'Gradle Test Executor 33'. Working directory: xxx Command: /usr/java/jdk-11.0.4/bin/java -Dillegal-access=deny -Dorg.gradle.native=false -javaagent:xxx,jmx=false @/tmp/gradle-worker-classpath17509364376879385105txt -Xmx512m -Dfile.encoding=UTF-8 -Duser.country=US -Duser.language=en -Duser.variant -ea worker.org.gradle.process.internal.worker.GradleWorkerMain 'Gradle Test Executor 33'
Successfully started process 'Gradle Test Executor 33'

x.y.z.IllegalAccessTest > testIllegalAccessQS STANDARD_OUT
About to set accessible

x.y.z.IllegalAccessTest > testIllegalAccessQS FAILED
java.lang.AssertionError: Should fail before getting here when run with --illegal-access=deny
at org.junit.Assert.fail(Assert.java:88)
at x.y.z.IllegalAccessTest.testIllegalAccessQS(IllegalAccessTest.java:36)

使用 Eclipse 运行时的错误消息是正确的
java.lang.reflect.InaccessibleObjectException: Unable to make field private static final java.util.Set java.lang.ClassLoader.loadedLibraryNames accessible: module java.base does not "opens java.lang" to unnamed module @6b9651f3

最佳答案

Test 的文档任务内容:List<String> jvmArgs :

The extra arguments to use to launch the JVM for the process. Does not include system properties and the minimum/maximum heap size.



没有别的,这是有道理的 - 因此这可能是:
test.jvmArgs = ["--illegal-access=deny"]

可能有或没有 --- .请注意 JUnit 5 may behave differently .

关于java - 如何使用 Gradle java 插件将 "illegal-access=deny"传递给单元测试的 JVM 参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59774234/

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