1

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

  • 让一些轻量级的 spring 容器一直运行,并针对这个轻量级容器运行所有单元测试用例。(或者可以访问它的 applicationContext)

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

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

我相信这个用例之前会出现,任何见解都会受到高度赞赏。

4

2 回答 2

0

Context caching is a built-in feature of Spring, so if your test cases use the same configuration file (or set of files) Spring won't repeatedly reload the context. Review the Context management and caching section of the reference docs:

By default, once loaded, the configured ApplicationContext is reused for each test. Thus the setup cost is incurred only once per test suite, and subsequent test execution is much faster. In this context, the term test suite means all tests run in the same JVM.

于 2013-06-06T20:33:24.293 回答
0

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

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

例如。设置:

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

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:BaseSpringUnitTestContext.xml")
public abstract class BaseSpringUnitTest {

然后进行测试

public class BlahTest extends BaseSpringUnitTest  {

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

于 2013-06-08T02:29:18.457 回答