Spring集成测试方法?

Spring集成测试方法?,spring,unit-testing,integration-testing,junit4,spring-3,Spring,Unit Testing,Integration Testing,Junit4,Spring 3,我正在开发一个没有单元测试的应用程序。我想开始为此应用程序编写测试用例。Bean Mocking是不存在的,我需要花费相当长的时间来设置它。因此,为了快速入门,并且因为我们根本没有任何测试用例,我正在考虑设置集成测试,一旦我对所有测试覆盖范围感到满意,我将慢慢地将其转换为真正的单元测试(通过模拟)。由于应用程序很大,加载spring容器需要相当长的时间,因此我想了解一些关于增加周转时间的建议。我想不出什么办法 让一些轻量级spring容器一直运行,并针对该轻量级容器运行所有单元测试用例。(或访

我正在开发一个没有单元测试的应用程序。我想开始为此应用程序编写测试用例。Bean Mocking是不存在的,我需要花费相当长的时间来设置它。因此,为了快速入门,并且因为我们根本没有任何测试用例,我正在考虑设置集成测试,一旦我对所有测试覆盖范围感到满意,我将慢慢地将其转换为真正的单元测试(通过模拟)。由于应用程序很大,加载spring容器需要相当长的时间,因此我想了解一些关于增加周转时间的建议。我想不出什么办法

  • 让一些轻量级spring容器一直运行,并针对该轻量级容器运行所有单元测试用例。(或访问其applicationContext)

  • 针对实际服务器运行测试用例。(从IDE远程运行Junit)

  • 利用SpringJUnit配置,以某种方式防止为每个单独的测试用例重新加载上下文


我确信这个用例之前就已经出现了,任何洞察都是值得赞赏的。

上下文缓存是Spring的内置功能,因此如果您的测试用例使用相同的配置文件(或一组文件),Spring不会重复重新加载上下文。查看参考文档的以下部分:

默认情况下,一旦加载,配置的
ApplicationContext
将重新用于每个测试。因此,每个测试套件只会产生一次设置成本,后续测试的执行速度要快得多。在此上下文中,术语测试套件意味着所有测试都在同一JVM中运行


在Spring中运行测试时,您可以将测试指向您希望使用的应用程序上下文配置。因此,您不必使用生产应用程序上下文,您可以为测试进行特殊配置。我个人有一个“集成测试应用程序上下文”和一个“单元测试应用程序上下文”。但你可以进一步分解它

最简单的设置方法是在超类上设置应用程序上下文,并让每个测试从其中一个扩展

例如,设置:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:BaseSpringIntegrationTestContext.xml")
public abstract class BaseSpringIntegrationTest {

然后进行测试

public class BlahTest extends BaseSpringUnitTest  {

下一步是研究如何加快spring上下文的启动。某些大型组件可能根本不需要为您的某些测试加载。

但是如果我们想单独运行您的每个单元测试用例,应用程序上下文将丢失。它工作的唯一方式是运行一整套Junit测试用例。你失去了进行单元测试的能力,而这种方法在TDD方面是完全无用的。@doc_180听起来你的问题不仅仅是单元测试。这是春天开始的时间。在本地运行应用程序进行开发时,您也必须面对这个问题。您应该研究如何降低起动弹簧的速度。添加日志记录并查找需要花费大量时间的内容。这将是最简单的解决方案。
public class BlahTest extends BaseSpringUnitTest  {