相关疑难解决方法(0)

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

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

我尝试了How to pass args to JVM 中的解决方案,它使用 Gradle 运行测试

# build.gradle
apply plugin: 'java'

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

  # also tried
  # jvmArgs('--illegal-access', 'deny')
  # jvmArgs '-Dillegal-access=deny'
}
Run Code Online (Sandbox Code Playgroud)

测试通过而不是失败。我确实看到测试说它们很脏,因为 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 …
Run Code Online (Sandbox Code Playgroud)

java junit gradle build.gradle gradle-plugin

7
推荐指数
1
解决办法
1422
查看次数

如何在 gradle 测试中启用有用的 NullPointerExceptions

此问题已在 Gradle 6.6 中修复

原帖

我想在测试中放置标志-XX:+ShowCodeDetailsInExceptionMessages以启用有用的 NPE ( https://openjdk.java.net/jeps/358 )

我试过

tasks.withType<Test> {
    jvmArgs("-XX:+ShowCodeDetailsInExceptionMessages")
    testLogging {
        setExceptionFormat("full") // Prints the message of the exception
    }
}
Run Code Online (Sandbox Code Playgroud)

但是 NPE 仍然没有消息。

这是我的java版本

java -version
openjdk version "14.0.1" 2020-04-14
OpenJDK Runtime Environment (build 14.0.1+7)
OpenJDK 64-Bit Server VM (build 14.0.1+7, mixed mode, sharing)
Run Code Online (Sandbox Code Playgroud)

使用更多研究进行编辑

为了更准确地找出问题的根源,我做了更多的工作。我的结论是它不是来自我的 java 也不是测试框架,它只能是 gradle 的错误配置或错误。这是我所做的:

我已经用这个 build.gradle.kts 设置了一个空的 gradle 项目

plugins {
    java
}
repositories {
    mavenCentral()
}
dependencies {
    testImplementation("junit:junit:4.13")
}
tasks.withType<Test> {
    jvmArgs("-XX:+ShowCodeDetailsInExceptionMessages") // Helpful …
Run Code Online (Sandbox Code Playgroud)

java gradle gradle-kotlin-dsl java-14

7
推荐指数
1
解决办法
468
查看次数

将 jvm 参数传递给 Gradle 测试任务

我想将 JVM 参数传递给我的 Gradle 测试任务。我使用 Cucumber 功能文件中的参数:${app.url}. 在build.gradle文件中,我放置了这些行:

test {
    testLogging.showStandardStreams = true
    systemProperties System.getProperties()
}
Run Code Online (Sandbox Code Playgroud)

当我执行时gradle test -Dapp.url=http://.....,我没有看到参数已传递给应用程序。我也尝试了以下方法,但结果是相同的:

test {
    testLogging.showStandardStreams = true
    systemProperty "app.url", System.getProperty("app.url")
}
Run Code Online (Sandbox Code Playgroud)

当我使用 Maven 并传递与 Jvm 参数相同的参数时,它工作得很好。现在我想切换到 Gradle,但我被传递参数所困扰。

java cucumber gradle

5
推荐指数
1
解决办法
3828
查看次数