use*_*612 5 groovy dependencies unit-testing gradle spock
我开始使用 Spock 测试框架,我的build.gradle依赖项部分如下所示:
dependencies {
testCompile "org.spockframework:spock-core:1.3-groovy-2.5"
}
Run Code Online (Sandbox Code Playgroud)
我有一个(无用的)Spock 测试,需要创建一个存根:
def 'A test that will fail'() {
given: ''
def random = Stub(Random)
}
Run Code Online (Sandbox Code Playgroud)
启动后,测试失败并出现给定错误:
CannotCreateMockException:无法为类 java.util.Random 创建模拟。非接口类型的模拟需要代码生成库。请将最新版本的 byte-buddy 或 cglib-nodep 放在类路径上。
Spock文档中提到了这个错误,它是由 cglib 或 byte-buddy 在运行时不可用引起的。
考虑到spock-core 的 pom 将 byte-buddy 和 cglib 都列为编译依赖项,为什么它们在运行时不保留?换句话说,为什么我们需要显式地将以下运行时依赖添加到我们的 build.gradle 文件中?
testRuntime "net.bytebuddy:byte-buddy:1.9.3"
Run Code Online (Sandbox Code Playgroud)
因为两者(byte-buddy和cglib-nodep)都被标记为<optional>true</optional>,从 Gradle 的角度来看它们是compileOnly依赖项 - 请参阅:https://blog.gradle.org/introducing-compile-only-dependencies
仅编译依赖项与常规编译依赖项明显不同。它们不包含在运行时类路径中,并且是不可传递的,这意味着它们不包含在依赖项目中。
| 归档时间: |
|
| 查看次数: |
4515 次 |
| 最近记录: |