带有闭包的Spock单元测试以“无可运行方法”错误结束

时间:2013-11-05 16:34:50

标签: java groovy junit gradle spock

我用以下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尝试运行关闭,就像它是另一种测试方法......如何避免这种情况?

4 个答案:

答案 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”目录。