Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why can't my test inherit its ContextConfiguration location from its parent?

In the interest of DRY, I want to define my ContextConfiguration in a parent class and have all my test classes inherit it, like so:

Parent class:

package org.my;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "/org/my/Tests-context.xml")
public abstract class BaseTest {

}

Child class:

package org.my;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(inheritLocations = true)
public class ChildTest extends BaseTest {

    @Inject
    private Foo myFoo;

    @Test
    public void myTest() {
          ...
    }
}

According to the ContextConfiguration docs I should be able to inherit the parent's location, but I can't get it to work. Spring is still looking for a file in the default location (/org/my/ChildTest-context.xml) and barfs when it can't find it. I've tried the following with no luck:

  • Making the parent class concrete
  • Adding a no-op test to the parent class
  • adding an injected member to the parent class as well
  • combinations of the above

I'm on spring-test 3.0.7 and JUnit 4.8.2.

like image 976
Evan Haas Avatar asked Jan 18 '13 17:01

Evan Haas


1 Answers

Remove the @ContextConfiguration(inheritLocations = true) on the child class. inheritLocations is set to true by default.

By adding the @ContextConfiguration(inheritLocations = true) annotation without specifying a locations ,you are telling to Spring to extended the list of resource locations by adding the default context which is /org/my/ChildTest-context.xml.

Try with something like this :

package org.my;

@RunWith(SpringJUnit4ClassRunner.class)
public class ChildTest extends BaseTest {

    @Inject
    private Foo myFoo;

    @Test
    public void myTest() {
          ...
    }
}
like image 110
Jean-Philippe Bond Avatar answered Sep 19 '22 04:09

Jean-Philippe Bond