Grails spock tests with private methods failing after upgrading to 2.5.0
Asked Answered
P

2

11

We've upgraded our app from Grails 2.4.4 to 2.5.0. All are working fine, but some test cases are failing which containing some private methods.

import org.junit.Before

class UserServiceSpec extends IntegrationSpec {

    @Before
    def setup() {
         // Some initialization
    }

    // being used in other test methods
    private void getParams() {
          // some code
    }

    void testUserUniqueEmali() {
         when: "this runs"
         // code
         then: "hello"
         // code
    }
}

Exception thrown:

java.lang.IllegalAccessException: Class org.spockframework.util.ReflectionUtil can not access a member of class com.test.UserServiceSpec with modifiers "private"
    at org.spockframework.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:153)
    at org.spockframework.runtime.model.MethodInfo.invoke(MethodInfo.java:84)
    at org.junit.runners.Suite.runChild(Suite.java:128)
    at org.junit.runners.Suite.runChild(Suite.java:27)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
    at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
    at org.junit.runner.JUnitCore.run(JUnitCore.java:115)
    at _GrailsTest.run_closure1(_GrailsTest.groovy:102)
    at TestApp.run_closure1(TestApp.groovy:32)

I generated dependency report and here are some stats:

org.spockframework:spock-core:1.0-groovy-2.4
org.codehaus.groovy:groovy-all:2.4.3

This shows that latest version of the Spock framework is being used, but I'm not able to fix this problem. I've tried removing "private" modifier, but it still not working.

Pertinent answered 16/4, 2015 at 17:56 Comment(0)
P
15

After investigating for some time, I figured out the problem but not the root cause.

Basically, that @Before annotation was the culprit and due to some reason, spock test was throwing that error. Removing that unused annotation fixed my problem.

This was working in Grails 2.4.4 and starts failing in 2.5.0, might be because of changes in Spock framework.

Pertinent answered 16/4, 2015 at 19:50 Comment(1)
answer from ZZ5 describes what's going onGwenette
W
7

I've encountered the same problem. To prevent them just don't name methods annotated with JUnit's @Before or @After like Spock's methods: cleanup and setup.

Wee answered 25/1, 2017 at 8:41 Comment(1)
saved my day, man, despite I'm using different setup (Groovy language)Deering

© 2022 - 2024 — McMap. All rights reserved.