多级测试类层次结构中的 Spring @ContextHierarchy(使用 Scala 和 ScalaTest)



与其拥有几个完整的应用程序上下文,复制和粘贴99%的内容并仅添加/删除上下文应该不同的几行,我宁愿将所有通用内容放在一个父上下文中,即"rootContext.xml"。其他所有内容都将是子上下文的一部分,并合并到父上下文中或替换它。

[1] 描述了设置@ContextHierarchy和使用单元测试类层次结构所需的所有内容。但它不起作用。

首先是我的类层次结构:

@RunWith(classOf[JUnitRunner])
@ContextHierarchy(value = Array(new ContextConfiguration(locations =  Array("classpath:/rootTestContext.xml"), name = "root")))
class TestBase extends FunSuite {...}
@ContextHierarchy(value = Array(new ContextConfiguration(locations = Array("classpath:/persistenceTestContext.xml"), name = "root",  ???inheritLocations = false???)))
class PersistenceTestBase extends TestBase {...}
class BasicTest extends TestBase {
   test("blah") { ... }
}
class NeedsExtraContextForPersistenceTest extends PersistenceTestBase {
   test("persist!") { ... }
}

Spring 应用程序上下文文件:

rootTestContext.xml:
<import resource="classpath:/configfiles/spring/genericCaching.xml"/>
<context:annotation-config/>
<context:component-scan base-package="my.package.cm" />
<context:component-scan base-package="my.package.package2.cm" />
persistenceTestContext.xml:
<import resource="classpath:/configfiles/spring/persistence.xml"/>

所以 persistenceTestContext.xml 应该在 parentContext 中添加一行。过去存在的通用内容现在在rootTestContect.xml中。但是,当运行NeedsExtraContextForPersistenceTest时,spring的组件扫描仪不会拾取Spring Bean进行自动布线。似乎父上下文中定义的扫描程序不起作用。为了清楚起见,使用标准方式(通过@ContextConfiguration)和完整的持久性TestContext.xml(包括扫描程序配置)运行时运行测试没有问题

由于只有少数示例使用带有@ContextHierarchy的测试层次结构,而没有使用Scala + ScalaTest的示例,如果您能提供一些见解,我将很高兴。

[1] http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#testcontext-ctx-management-ctx-hierarchies

这些注释由Spring JUnit运行器处理,@RunWith(SpringJUnit4ClassRunner.class); 如果你编写标准的JUnit测试(在scala中)并使用该运行器,那么它应该可以工作。如果你想在这个春天的东西中使用scalate,你可能需要编写你自己的跑步者,同时调用弹簧跑步者会做的事情和scalatest 跑步者会做的事情。

最新更新