我用以下then
块写了一个简单的特征方法:
then:
1 * view.setAttachments({ it?.size == 3 })
但gradle test
因错误而失败:
initializationError
java.lang.Exception: No runnable methods
at org.junit.runners.BlockJUnit4ClassRunner.validateInstanceMethods(BlockJUnit4ClassRunner.java:169)
at org.junit.runners.BlockJUnit4ClassRunner.collectInitializationErrors(BlockJUnit4ClassRunner.java:104)
at org.junit.runners.ParentRunner.validate(ParentRunner.java:355)
...
initializationError
java.lang.Exception: Test class should have exactly one public zero-argument constructor
at org.junit.runners.BlockJUnit4ClassRunner.validateZeroArgConstructor(BlockJUnit4ClassRunner.java:147)
at org.junit.runners.BlockJUnit4ClassRunner.validateConstructor(BlockJUnit4ClassRunner.java:124)
at org.junit.runners.BlockJUnit4ClassRunner.collectInitializationErrors(BlockJUnit4ClassRunner.java:103)
at org.junit.runners.ParentRunner.validate(ParentRunner.java:355)
at org.junit.runners.ParentRunner.<init>(ParentRunner.java:76)
...
我注意到如果我删除了闭包,那就没有错误了
then:
1 * view.setAttachments(_) // everything works well without closure!
似乎Spock尝试运行关闭,就像它是另一种测试方法......如何避免这种情况?
答案 0 :(得分:7)
我在尝试编写spring-boot测试时遇到了类似的问题。
不要使用@RunWith(SpringRunner.class)并尝试删除你的junit runner如果你正在使用另一个。
对我来说,我的Spock规范正确执行而没有指定SpringRunner。
答案 1 :(得分:4)
我发现在我的情况下,问题是测试文件/类以Test
结束,而不是Spec
。更改解决了问题(例如SomeServiceTest
- &gt; SomeServiceSpec
)。
答案 2 :(得分:0)
尝试将以下属性添加到build.gradle
test {
systemProperty 'project.buildDir', project.buildDir
}
答案 3 :(得分:0)
我有同样的问题。对我来说,我将测试文件从“ src”目录移动到“ Test”目录。