我对Spring很新,我的理解有点沙哑,所以忍受我和白痴的单词答案。
我已经开始研究一个相对较大的基于maven的项目,它有一个(xml)弹簧配置。为此我们有一堆JUnit测试。目前,测试的弹簧配置取代了核心项目模块的配置,这是一个问题,因为这意味着如果我们对主项目的配置进行更改,那么这些更改不会反映在测试模块中,因此它是可能会得到有趣的测试结果。
我们目前正在更改此结构,以便测试模块配置覆盖(而不是替换)主模块配置。所以我们只需要覆盖每个测试我们感兴趣的特定bean。
这是最好的方法吗?还有替代方法吗?是否有可能进一步微调这一点,以便您可以覆盖特定bean(而不是整个bean)的特定setter进行测试?
非常感谢任何建议。
答案 0 :(得分:1)
在我看来,我不得不捣乱测试它的方法有点奇怪。
如果可能的话,我会尽量避免这种情况,并使用spring资源来帮助你,通过依赖注入,测试和开发和模拟框架的不同应用程序上下文,你可以测试我能想到的几乎所有东西。
也许你可以尝试使用它们。
一个例子,模拟用户安全上下文有点困难,但是使用spring它变得相当容易,你只需要为测试创建一个application-context.xml(并指向它)并分配一个工厂它创建一个身份验证Bean类型(它是一个接口),你可以使用easy mock来自动化这个bean响应。
但要实现这一点,你必须在构建代码时考虑到这一点,而不是调用SecurityContext.getContext ....你从工厂注入了Authentication Bean。
答案 1 :(得分:1)
在您的主配置中,将所有与环境相关的配置(如datasource,jms connectionfactory等)分离到单独的配置文件中(类似于infrastructure-config.xml)。在测试和测试中不会改变的配置deploy进入另一个文件 - application-config.xml。
现在测试只创建一个新版本的基础架构配置文件 - test-infrastructure-config.xml,并将其与主要的application-config一起使用。
答案 2 :(得分:1)
您可以将主配置拆分为单独的(逻辑)单元,并根据需要将它们导入到测试配置中。
请记住,Spring 3.1将引入XML配置文件。这非常适合测试(具有不同的环境特定配置)。它还没有最终发布,但我会(并且确实)在新项目中使用milestone。