引言
本项目所有的项目均回收Maven的尺度目次布局:
而且所有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); } }
在上面的源代码里我们要留意三点:
以上三点缺一不行。
例子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