资讯专栏INFORMATION COLUMN

Spring、Spring Boot和TestNG测试指南 - 使用Spring Testing工具

Maxiye / 250人阅读

摘要:源代码见需要注意的是,如果是专供某个测试类使用的话,把它放到外部并不是一个好主意,因为它有可能会被扫描到,从而产生一些奇怪的问题。

Github地址

既然我们现在开发的是一个Spring项目,那么肯定会用到Spring Framework的各种特性,这些特性实在是太好用了,它能够大大提高我们的开发效率。那么自然而然,你会想在测试代码里也能够利用Spring Framework提供的特性,来提高测试代码的开发效率。这部分我们会讲如何使用Spring提供的测试工具来做测试。

例子1

源代码见FooServiceImplTest:

@ContextConfiguration(classes = FooServiceImpl.class)
public class FooServiceImplTest extends AbstractTestNGSpringContextTests {

  @Autowired
  private FooService foo;

  @Test
  public void testPlusCount() throws Exception {
    assertEquals(foo.getCount(), 0);

    foo.plusCount();
    assertEquals(foo.getCount(), 1);
  }

}

在上面的源代码里我们要注意三点:

测试类继承了AbstractTestNGSpringContextTests,如果不这么做测试类是无法启动Spring容器的

使用了@ContextConfiguration来加载被测试的Bean:FooServiceImpl

FooServiceImpl@Component

以上三点缺一不可。

例子2

在这个例子里,我们将@Configuration作为nested static class放在测试类里,根据@ContextConfiguration的文档,它会在默认情况下查找测试类的nested static @Configuration class,用它来导入Bean。

源代码见FooServiceImplTest:

@ContextConfiguration
public class FooServiceImplTest extends AbstractTestNGSpringContextTests {

  @Autowired
  private FooService foo;

  @Test
  public void testPlusCount() throws Exception {
    assertEquals(foo.getCount(), 0);

    foo.plusCount();
    assertEquals(foo.getCount(), 1);
  }

  @Configuration
  @Import(FooServiceImpl.class)
  static class Config {
  }

}
例子3

在这个例子里,我们将@Configuration放到外部,并让@ContextConfiguration去加载。

源代码见Config:

@Configuration
@Import(FooServiceImpl.class)
public class Config {
}

FooServiceImplTest:

@ContextConfiguration(classes = Config.class)
public class FooServiceImplTest extends AbstractTestNGSpringContextTests {

  @Autowired
  private FooService foo;

  @Test
  public void testPlusCount() throws Exception {
    assertEquals(foo.getCount(), 0);

    foo.plusCount();
    assertEquals(foo.getCount(), 1);
  }

}

需要注意的是,如果@Configuration是专供某个测试类使用的话,把它放到外部并不是一个好主意,因为它有可能会被@ComponentScan扫描到,从而产生一些奇怪的问题。

参考文档

Spring Framework Testing

Context configuration with annotated classes

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/67427.html

相关文章

  • SpringSpring BootTestNG测试指南 - 使用Spring Boot Test

    摘要:地址前面一个部分讲解了如何使用工具来测试项目,现在我们讲解如何使用工具来测试项目。所以我们可以利用这个特性来进一步简化测试代码。因为只有这样才能够在测试环境下发现生产环境的问题,也避免出现一些因为配置不同导致的奇怪问题。 Github地址 前面一个部分讲解了如何使用Spring Testing工具来测试Spring项目,现在我们讲解如何使用Spring Boot Testing工具来测...

    Anshiii 评论0 收藏0
  • SpringSpring BootTestNG测试指南 - @TestPropertySourc

    摘要:地址可以用来覆盖掉来自于系统环境变量系统属性的属性。同时优先级高于。利用它我们可以很方便的在测试代码里微调模拟配置比如修改操作系统目录分隔符数据源等。源代码例子使用工具也可以和一起使用。源代码见参考文档 Github地址 @TestPropertySource可以用来覆盖掉来自于系统环境变量、Java系统属性、@PropertySource的属性。 同时@TestPropertySou...

    paney129 评论0 收藏0
  • SpringSpring BootTestNG测试指南 - 测试AOP

    摘要:首先先来看我们事先定义的以及。可以看到会修改方法的返回值,使其返回。例子测试的行为最简单的测试方法就是直接调用,看看它是否使用返回。先看这段代码这些是利用提供的和来判断是否被代理了的实现是通过动态代理来做的。 Github地址 Spring提供了一套AOP工具,但是当你把各种Aspect写完之后,如何确定这些Aspect都正确的应用到目标Bean上了呢?本章将举例说明如何对Spring...

    changfeng1050 评论0 收藏0
  • SpringSpring BootTestNG测试指南 - @OverrideAutoConfi

    摘要:因为只有这样才能够在测试环境下发现生产环境的问题,也避免出现一些因为配置不同导致的奇怪问题。而方法则能够不改变原有配置不提供新的配置的情况下,就能够关闭。 Github地址 在Chapter 1: 基本用法 - 使用Spring Boot Testing工具里提到: 除了单元测试(不需要初始化ApplicationContext的测试)外,尽量将测试配置和生产配置保持一致。比如如果生产...

    elisa.yang 评论0 收藏0
  • SpringSpring BootTestNG测试指南 - 测试关系型数据库

    摘要:地址提供了对的支持,能够让我们很方便对关系型数据库做集成测试。如果想要在打包的时候跳过集成测试,只需要。例子使用因为使用了来做集成测试,得益于其机制,不需要自己构建和的。 Github地址 Spring Test Framework提供了对JDBC的支持,能够让我们很方便对关系型数据库做集成测试。 同时Spring Boot提供了和Flyway的集成支持,能够方便的管理开发过程中产生...

    Meils 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<