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

tbr*_*lle 3 java groovy junit gradle spock

我用以下then块写了一个简单的特征方法:

then:
1 * view.setAttachments({ it?.size == 3 })
Run Code Online (Sandbox Code Playgroud)

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)
    ...
Run Code Online (Sandbox Code Playgroud)

我注意到如果我删除了闭包,就没有错误了

then:
1 * view.setAttachments(_) // everything works well without closure!
Run Code Online (Sandbox Code Playgroud)

似乎Spock试图运行闭包,就像它是另一种测试方法......如何避免这种情况?

Kar*_*gan 7

我在尝试编写spring-boot测试时遇到了类似的问题.

如果你正在使用另一个,请不要使用@RunWith(SpringRunner.class)并尝试删除你的junit runner.

对我来说,我的Spock规范正确执行而没有指定SpringRunner.