栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

如何在Spring环境中进行单元测试

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何在Spring环境中进行单元测试

对一个Java开发人员来说,单元测试是我们编码过程中不可或缺的一部分了。单元测试让你关注软件的基本单元的正确性,可以在编码阶段就提前暴露代码缺陷;单元测试具有执行速度快、可复用性的特点;单元测试可以让你进行代码重构时更加从容。所以越是核心的代码,进行单元测试越有必要。

很多人觉得单元测试很重要,但是很多人都做不好单元测试,尤其是在集成了spring框架的项目,很多人都不知道怎么方便快捷的进行单元测试。在集成了spring的项目中你是否有这样的困扰,每次执行一个test case你就必须等待spring容器加载环境长达十几秒,对于追求效率的你来说简直是个噩梦。下面我提出两种方法让你的单元测试更加方便。

使用spring-boot-test-starter做单元测试

spring-boot-test-starter集成了Junit5、Mockito、Spring Test等工具可以让你在spring的环境下非常方便的做单元测试,在spring环境下做测试你可以方便的使用依赖注入方式完成单元测试,更重要的是使用pring-boot-test-starter做单元测试只要你想,你可以只需要加载你感兴趣的一个或者几个java bean进spring容器直接开始测试而不需要将所有环境准备好,加载所有的bean。请看下面的例子:

@Service
public class Demo1{
  
  public Boolean test(){
  	//do something
  }
}

@Service
public class Demo{
	
	@Autowired
	private Demo1 demo1;
	
	public Boolean doInvoke() {
		//do something
	}
}

@SpringBootTest(classes=Demo.class)
public class demoTest{

	@Autowired
	private Demo demo;
	
	@MockBean
	private Demo1 demo1;
	
	@Test
	public void test() {
		BDDMockito.given(demo1.test).willReturn(true);
		Boolean result = demo.doInvoke();
		Assertions.assertTrue(result);
	}
}

可以看到我们使用@SpringBootTest注解,并且属性上注明了classes=Demo.class,意思就是说只将Demo这个类加载到spring容器中,因为我们只关注这个类的单元测试,其他类我们不关心一律mock掉。这样是不是很方便,再也不会因为某个数据库挂了,某个资源加载不到影响单元测试的执行,更不用等spring慢腾腾的把所有bean加载再执行了。

不要在你的单元测试中引入Spring

还有一种方式就是干脆不要在你的单元测试中使用Spring,这种方式同样可以解决因为spring加载环境慢的原因而导致单元测试慢的问题。同样我们用上面例子改造下:

@Service
public class Demo1{
  
  public Boolean test(){
  	//do something
  }
}

@Service
public class Demo{
	
	private Demo1 demo1;
	
	public Demo(Demo1 demo1) {
		this.demo1=demo1;
	}
	
	public Boolean doInvoke() {
		//do something
	}
}


@RunWith(MockitoJUnitRunner.class)
public class DemoTest{

	@Mock
	private Demo1 demo1;
	
	@InjectMocks
	private Demo demo;

	@Test
	public void test() {
		BDDMockito.given(demo1.test).willReturn(true);
		Boolean result = demo.doInvoke();
		Assertions.assertTrue(result);
	}

}

注意上面单元测试已经没有使用spring了,取而代之的是将单元测试运行在MockitoJunit环境,以便启用mockito的注解。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/863590.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号