使用build.gradle中的JVM args启动TestNG调试

时间:2018-01-09 14:30:57

标签: java gradle groovy testng aspectj

我有一个Gradle项目,其中测试使用TestNG运行。 (我使用Intellij IDEA)

每次执行测试时我都需要启动一个aspectjweaver。 aspectjweaver定义为JVM参数,并添加到Build.gradle中的applicationDefaultJvmArgs:

version '1.0'

apply plugin: 'application'
def aspectjVersion = "1.8.7"
mainClassName = 'exa.tags.runner.TestManager'
applicationDefaultJvmArgs=["-javaagent:APP_HOME_PLACEHOLDER/lib/aspectjweaver-${aspectjVersion}.jar"]

dependencies {
    compile "org.aspectj:aspectjweaver:${aspectjVersion}"
}

def weaver = configurations.compile.find { it.name.contains("aspectjweaver") }

startScripts << {
    unixScript.text = unixScript.text.replace('APP_HOME_PLACEHOLDER', '\$APP_HOME')
    windowsScript.text = windowsScript.text.replace('APP_HOME_PLACEHOLDER', '%APP_HOME%')
}

run {
    doFirst {
        jvmArgs = jvmArgs.grep {
            !it.contains('APP_HOME_PLACEHOLDER')
        }
        jvmArgs = jvmArgs << "-javaagent:$weaver"
    }
}

因此,当我使用此运行任务启动测试时,一切正常。 但问题是,当我右键单击测试并选择TestNG Run或Debug时,aspectj不会启动。

当我使用maven时,aspectjweaver作为argLine添加到maven-surefire-plugin并且每次都工作(调试,运行单个测试或执行mvn测试目标)。

那么,将JVM参数设置为AspectJ的实际版本的正确方法和地点是什么?我尝试在编辑配置中将aspecj.jar的路径添加为默认arg。这有效,但在这种情况下,我依赖于特定的缓存文件。

这可以在项目文件中的某处完成,而无需更改IDE配置吗?

更新

我尝试在build.gradle中添加测试任务:

def weaver = configurations.compile.find { it.name.contains("aspectjweaver") }

test {
    useTestNG()
    testLogging.showStandardStreams = true
    println "Adding aspectJ weaver: ${weaver}"
    jvmArgs = jvmArgs << "-javaagent:$weaver"
}

现在我在每个任务执行时看到这个输出(例如,当我运行干净任务时)。

但是当我右键单击test并选择Debug

enter image description here

我没有看到输出。 当我选择使用TestNG运行一个测试时,看起来没有执行任务'test'。

0 个答案:

没有答案