2011-09-29 175 views
1

我对Spring相当陌生,而且我的理解有点棘手,所以请耐心等待我和白痴的答案。弹簧测试配置

我已经开始研究一个相对较大的基于maven的项目,该项目的负载为(xml)弹簧配置。为此,我们有一堆JUnit测试。此时测试的弹簧配置会替换核心项目模块的配置,这是一个问题,因为这意味着如果我们对主项目的配置进行更改,那么这些更改不会反映在测试模块中,因此它可能得到有趣的测试结果。

我们目前正在改变这种结构,以便测试模块配置覆盖(而不是替代)主模块配置。所以我们只需要重写我们感兴趣的每个测试的特定bean。

这是最好的方法吗?有其他方法吗?是否有可能对此进一步进行微调,以便可以覆盖特定bean的特定setter(而不是整个bean)以进行测试?

任何意见是非常感谢。

+0

你想要测试什么?我们在春季环境之外测试MVC控制器和应用程序服务,无需单独配置。 – blank

+0

它只是核心代码而不是前端的东西,所以不是MVC。主要测试数据库访问类,自定义管道等。这些问题主要是由于项目的可配置性 - 例如我们使用各种xsd等。定义我们的一些内部数据类型等。 – James

回答

1

您可以将您的主配置拆分为单独的(逻辑)单元,并根据需要将它们导入到您的测试配置中。

请记住,Spring 3.1将引入XML配置文件。这非常适合测试(具有不同的环境特定配置)。它还没有最终发布,但我会(并且确实)在新项目中使用milestone

1

在我看来,不得不用混乱的方法来测试它有点奇怪。

如果可能的话,我会尽量避免这种情况,并使用spring资源来帮助您,依赖注入,测试和开发的不同应用程序环境以及模拟框架,您几乎可以测试任何我能想到的东西。

也许你可以尝试使用这些。

一个例子,模拟用户安全上下文有点困难,但随着spring的变得相当容易,你只需要为测试(并指向它)创建一个application-context.xml并指定一个工厂在它中创建一个认证类型的Bean(它是一个接口),你可以使用简单的模拟来自动化这个bean响应。

但是为了工作,您必须考虑到这一点来构建代码,以免调用SecurityContext.getContext ....从工厂注入身份验证Bean。

1

在你的主要配置中,将所有依赖于环境的配置(如datasource,jms connectionfactory等)分隔到单独的配置文件 - (类似infrastructure-config.xml)。跨越测试&部署不会更改的配置会进入不同的文件 - application-config.xml。

现在仅用于测试,创建一个新版本的基础结构配置文件 - test-infrastructure-config.xml,并将其与主应用程序配置一起使用。