我用下面的 then
block 写了一个简单的特征方法:
then:
1 * view.setAttachments({ it?.size == 3 })
但是 gradle 测试
失败并出现错误:
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 试图像运行另一种测试方法一样运行闭包...如何避免这种情况?
最佳答案
我在尝试编写 spring-boot 测试时遇到了类似的问题。
不要使用@RunWith(SpringRunner.class),如果您正在使用另一个 junit runner,请尝试删除它。
对我来说,我的 Spock 规范在没有指定 SpringRunner 的情况下正确执行。
关于java - 带闭包的 Spock 单元测试以错误 "No runnable methods"结束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19794021/