gpt4 book ai didi

java - Spring:单元和集成测试

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:50:57 25 4
gpt4 key购买 nike

我正在寻找使用 Spring 设置单元和集成测试的最佳实践。

我通常使用 3 种测试:

  • “真正的”单元测试(无依赖)
  • 测试作为“单元”测试运行(内存数据库、本地调用、模拟对象,...)或作为集成测试(持久数据库、远程调用……)
  • 测试仅作为集成测试运行

目前我只有第二类的测试,这是棘手的部分。我设置了一个基础测试类,例如:

@ContextConfiguration(locations = { "/my_spring_test.xml" })
public abstract class AbstractMyTestCase extends AbstractJUnit4SpringContextTests

“单元”测试如:

public class FooTest extends AbstractMyTestCase

具有 Autowiring 的属性。

在不同的(集成测试)环境中运行测试的最佳方式是什么?将测试子类化并覆盖 ContextConfiguration?

@ContextConfiguration(locations = { "/my_spring_integration_test.xml" })
public class FooIntegrationTest extends FooTest

这行得通吗(我目前无法在这里轻松测试)?这种方法的问题是“@ContextConfiguration(locations = { "/my_spring_integration_test.xml"})”重复了很多。

有什么建议吗?

问候,弗洛里安

最佳答案

我扩展了 GenericXmlContextLoader

public class MyContextLoader extends GenericXmlContextLoader {

并覆盖

protected String[] generateDefaultLocations(Class<?> clazz)

收集目录配置文件名的方法,我可以通过 SystemProperty (-Dtest.config=) 指定该目录。

我还修改了以下方法以不修改任何位置

@Override
protected String[] modifyLocations(Class<?> clazz, String... locations) {
return locations;
}

我这样使用上下文加载器

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(loader = MyContextLoader.class)
public class Test { .... }

使用指示配置文件源的 SystemProperty 运行测试使您现在可以使用完全不同的配置。

SystemProperty 的使用当然只是指定配置位置的一种策略。你可以在generateDefaultLocations()中为所欲为.


编辑:

此解决方案使您能够使用完整的不同应用程序上下文配置(例如,对于模拟对象),而不仅仅是不同的属性。您不需要构建步骤即可将所有内容部署到您的“类路径”位置。如果没有给出系统属性,我的具体实现还默认使用用户名来查找配置目录 (src/test/resources/{user})(以便为项目中的所有开发人员维护特定的测试环境)。

仍然可以并推荐使用 PropertyPlaceholder。


编辑:

Spring 版 3.1.0将支持 XML profiles/Environment Abstraction 这与我的解决方案类似,可以为不同的环境/配置文件选择配置文件。

关于java - Spring:单元和集成测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4593530/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com