java - 从 JAR 依赖项运行测试

标签 java gradle junit

我正在使用我的测试代码创建一个 JAR,并计划从不同的项目运行测试。

以下是我尝试实现的方法。

项目B:

configurations { testApi }
task testJar ....
artifacts { testApi testJar }

项目A:

dependencies {
    testRuntime "xx.xxx.xxx.projectName", configuration: "integtest";
}

测试似乎没有使用这种方法运行。知道可能是什么问题吗?还有更好的方法吗?

最佳答案

Gradle 仅在通过相应 Test 类型任务的 testClassesDirs 属性配置的目录中查找测试类,该任务使用 java 插件用于 test 任务的 project.sourceSets.test.output.classesDirs。不支持从依赖项中的 JAR 文件运行测试。

您需要提取 JAR 文件并将提取的目录添加到此属性。我认为类似以下构造的东西应该有效,但我没有测试它:

configurations {
    externalTests
}
dependencies {
    externalTests "xx.xxx.xxx.projectName", configuration: "integtest"
    testRuntime "xx.xxx.xxx.projectName", configuration: "integtest"
}
test {
    // if only one dependency in externalTests you can use the simpler, it will fail if there are multiple dependencies
    testClassesDirs += zipTree(configurations.externalTests.singleFile)
    // if multiple dependencies in externalTests you need to use
    testClassesDirs += configurations.externalTests.files.collect { zipTree it }.sum()
}

关于java - 从 JAR 依赖项运行测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47791175/

相关文章:

groovy - 如何在gradle中打印任务名称?

android - 在build.gradle中同时加载espresso网站和核心时,如何解决重复错误?

java - SpringJUnit4ClassRunner 不会在 JUnit 测试用例结束时关闭 Application Context

用于测试的 spring junit 加载应用程序上下文

Java 客户端/服务器双向套接字不工作

java - JDO - 我应该使用 detachCopy 还是 makeTransient?

java - 为什么 EncryptedPrivateKeyInfo 无法在 Java 中读取我的 PKCS#8 加密私钥?

java - java在使用整数/ double / float 的情况下是否使用内存

gradle - Groovy和Junit

java - 如何为测试(junit)中的 block 设置超时?