8

为了 DRY,我想在父类中定义我的 ContextConfiguration 并让我的所有测试类都继承它,如下所示:

父类:

package org.my;

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

}

儿童班:

package org.my;

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

    @Inject
    private Foo myFoo;

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

根据ContextConfiguration文档,我应该能够继承父级的位置,但我无法让它工作。Spring 仍在默认位置 ( /org/my/ChildTest-context.xml) 中寻找文件,找不到时会 barfs 。我试过以下没有运气:

  • 使父类具体化
  • 向父类添加无操作测试
  • 将注入的成员也添加到父类
  • 以上组合

我在 spring-test 3.0.7 和 JUnit 4.8.2 上。

4

1 回答 1

13

删除@ContextConfiguration(inheritLocations = true)子类上的。inheritLocations默认设置为 true。

通过在@ContextConfiguration(inheritLocations = true)不指定位置的情况下添加注释,您可以告诉 Spring 通过添加默认上下文来扩展资源位置列表,即/org/my/ChildTest-context.xml.

尝试这样的事情:

package org.my;

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

    @Inject
    private Foo myFoo;

    @Test
    public void myTest() {
          ...
    }
}
于 2013-01-18T17:34:19.663 回答