我最近开始作为我当前项目的自由职业者。我投入的一件事是失败的 Jenkins 构建(它从 4 月 8 日开始失败,在我开始这里的一周前)。
一般来说,您可以在日志中看到大量 DI 问题。我做的第一件事是让所有测试以相同的方式工作,从相同的应用程序上下文开始。他们还实现了自己的“模拟”东西,这似乎无法正常工作。在与首席开发人员讨论后,我建议开始使用 Springockito。(对于某个模块,他们需要模拟进行集成测试——遗留原因,无法更改)
无论如何,在那之后事情开始严重失败。许多在测试中被嘲笑的豆子,根本没有被嘲笑,或者没有被发现或其他什么。通常,它会在加载应用程序上下文时失败,说明缺少一个或另一个 bean。
我尝试了不同的东西和不同的方法,但最后,只有我最担心的事情会起作用:将@DirtiesContext 添加到每个测试中。现在,maven 构建又开始变绿了,测试开始做他们应该做的事情。但是我每次都重新加载 Spring 上下文,这需要时间——这都是相对的,因为上下文在大约 1-2 秒内加载。
这个故事的一个侧面说明是他们已经升级到 Hibernate 4,因此升级到 Spring 3.2。以前,他们使用的是旧版本的 Spring 3。当时所有的测试都可以正常工作,并且不需要 @DirtiesContext 的东西。
现在,最让我担心的是,我无法立即想到对这种奇怪行为的解释。几乎似乎 Springs 上下文被弄脏了,只需启动一个使用 @Autowired bean 的测试。并非所有测试都使用 Mocks,所以不可能这样。这听起来很熟悉吗?有没有人在使用(最新版本的)Spring 进行集成测试时有相同的经验?
在 Stackoverflow 上,我发现了这张票:测试如何“弄脏”spring 应用程序上下文? 它似乎几乎总结了我所看到的行为,但关键是我们正在自动装配服务/存储库/......,并且我们在这些类上没有任何设置器。
有什么想法吗?
谢谢!