3

我用以下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

4 回答 4

8

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

不要使用 @RunWith(SpringRunner.class) 如果您正在使用另一个,请尝试删除您的 junit 跑步者。

对我来说,我的 Spock 规范在没有指定 SpringRunner 的情况下正确执行。

于 2016-09-27T18:15:14.440 回答
4

我发现我的问题是测试文件/类以 结尾Test,而不是Spec. 更改解决了问题(例如SomeServiceTest-> SomeServiceSpec)。

于 2014-11-25T01:28:51.270 回答
0

我有同样的问题。对我来说,将测试文件从“src”目录移动到“Test”目录。

于 2020-03-03T17:49:36.007 回答
-1

尝试将以下属性添加到您的 build.gradle

 test {
        systemProperty 'project.buildDir', project.buildDir
    }
于 2016-01-26T19:12:02.663 回答