【问题标题】:Spring Test Configurations弹簧测试配置
【发布时间】:2011-11-27 17:20:02
【问题描述】:

我对 Spring 还很陌生,我的理解有点生硬,所以请耐心等待我和白痴的回答。

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

我们目前正在更改此结构,以便测试模块配置覆盖(而不是替换)主模块配置。因此,我们只需为每个测试覆盖我们感兴趣的特定 bean。

这是最好的方法吗?有替代方法吗?是否可以进一步微调它,以便您可以覆盖特定 bean(而不是整个 bean)的特定设置器进行测试?

非常感谢任何建议。

【问题讨论】:

  • 你想测试什么?我们在 Spring 上下文之外测试 MVC 控制器和应用程序服务,无需单独配置。
  • 它只是核心代码而不是前端的东西,所以不是 MVC。主要是测试数据库访问类,自定义管道等。问题主要是由于项目的可配置性 - 例如我们使用各种 xsd 等来定义我们的一些内部数据类型等。

标签: java spring testing configuration junit


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    在我看来,不得不弄乱测试它的方法本身就有点奇怪。

    如果可能的话,我会完全避免这种情况,并使用 spring 资源来帮助您,通过依赖注入、用于测试和开发的不同应用程序上下文以及模拟框架,您几乎可以测试我能想到的所有东西。

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

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

    但要使其工作,您必须在构建代码时牢记这一点,因此不要调用 SecurityContext.getContext....,而是从工厂注入该 Authentication Bean。

    【讨论】:

      【解决方案3】:

      在您的主配置中,将所有依赖于环境的配置(如数据源、jms connectionfactory 等)分离到一个单独的配置文件中 - (如 Infrastructure-config.xml 之类的)。在测试和部署中不会更改的配置进入不同的文件 - application-config.xml。

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

      【讨论】:

        猜你喜欢
        • 2012-11-02
        • 2016-04-26
        • 1970-01-01
        • 1970-01-01
        • 2011-09-11
        • 2019-09-26
        • 2016-12-13
        • 1970-01-01
        相关资源
        最近更新 更多