欢迎访问昆山宝鼎软件有限公司网站! 设为首页 | 网站地图 | XML | RSS订阅 | 宝鼎邮箱 | 后台管理


新闻资讯

MENU

软件开发知识

一个是给 昆山软件定制开发 计数器+1

点击: 次  来源:劳务派遣管理系统 时间:2017-12-07

原文出处: chanjarster

引言

本项目所有的项目均回收Maven的尺度目次布局:

  • src/main/java,措施java文件目次
  • src/main/resource,措施资源文件目次
  • src/test/java,测试代码目次
  • src/test/resources,测试资源文件目次
  • 而且所有Maven项目都可以利用mvn clean test方法跑单位测试,出格需要留意,只有文件名是*Test.java才会被执行,必然要留意这一点哦。

    认识TestNG

    先认识一下TestNG,这里有一个FooServiceImpl,内里有两个要领,一个是给计数器+1,一个是获取当前计数器的值:

    @Component
    public class FooServiceImpl implements FooService {
    
      private int count = 0;
    
      @Override
      public void plusCount() {
        this.count++;
      }
    
      @Override
      public int getCount() {
        return count;
      }
    
    }

    然后我们针对它有一个FooServiceImplTest作为UT:

    public class FooServiceImplTest {
    
      @Test
      public void testPlusCount() {
        FooService foo = new FooServiceImpl();
        assertEquals(foo.getCount(), 0);
    
        foo.plusCount();
        assertEquals(foo.getCount(), 1);
      }
    
    }

    留意看代码里的assertEquals(…),我们操作它来判定Foo.getCount要领是否凭据预期执行。所以,所谓的测试其实就是给定输入、执行一些要领,昆山软件开发,assert功效是否切合预期的进程。

    利用Spring Testing东西

    既然我们此刻开拓的是一个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);
      }
    
    }

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

    1. 测试类担任了AbstractTestNGSpringContextTests,假如不这么做测试类是无法启动Spring容器的
    2. 利用了[@ContextConfiguration][javadoc-ContextConfiguration]来加载被测试的Bean:FooServiceImpl
    3. 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 Boot Testing东西

    前面一个部门讲授了如何利用Spring Testing东西来测试Spring项目,此刻我们讲授如何利用Spring Boot Testing东西来测试Spring Boot项目。

    在Spring Boot项目里既可以利用Spring Boot Testing东西,也可以利用Spring Testing东西。 在Spring项目里,一般利用Spring Testing东西,固然理论上也可以利用Spring Boot Testing,不外因为Spring Boot Testing东西会引入Spring Boot的一些特性好比AutoConfiguration,这大概会给你的测试带来一些奇怪的问题,所以一般不推荐这样做。

    例子1:直接加载Bean

    利用Spring Boot Testing东西只需要将@ContextConfiguration改成@SpringBootTest即可,源代码见FooServiceImpltest:

    @SpringBootTest(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);
      }
    
    }

    例子2:利用内嵌@Configuration加载Bean