BDD与单元测试相关问题介绍
java的单元测试原理
原理描述
@RunWith是什么?
不同的测试工具有不同的单测规则,原理基本如上段所述。我们比较常用的单测框架有junit,而且junit的不同版本其语法规则也不一样。比如junit3,junit4,junit5.不能混用的原因就是他们有不同的语法解析过程。用的不对等价于白用。
所以@RunWith表示junit版本比较多的情况下指定运行的junit版本。我们开发中比较常见的有@RunWith(SpringRunner.class)、@RunWith(SpringJUnit4ClassRunner.class)、@RunWith(SpringJUnit5ClassRunner.class)等。在不指定@RunWith的时候会创建一个默认简单的单测构造器,然后直接去执行测试用例。@RunWith的作用是为了解决版本问题。但是有时候没有版本问题就不需要添加这个注解。
单元测试和Spring的整合
什么是行为驱动测试
我的理解是单元测试只能针对具体的函数或者接口,但是我们的业务往往是相互连接,而且错综复杂的。逐个对函数进行单测只能保证单个函数没有问题,但当方法组合成业务的时候,很难保证系统整体上没有问题。
比如:
对于接口 A、B、C.......的随机组合,按不同顺序去请求接口,那么系统是否会产生一些出乎意料的结果?
所以,行为驱动测试是以业务人员的视角进行测试。
如何实现BDD
市面上比较常用的BDD框架是cucumber 。
先做一个demo尝尝鲜!
1、idea安装cucumber插件。(单元测试的main主函数从此触发)
引入maven依赖
核心解析包
<dependency>
<groupId>io.cucumbergroupId>
<artifactId>cucumber-javaartifactId>
<version>7.1.0version>
dependency>
<dependency>
<groupId>io.cucumbergroupId>
<artifactId>cucumber-springartifactId>
<version>6.9.0version>
dependency>
单测包
<dependency>
<groupId>io.cucumbergroupId>
<artifactId>cucumber-junitartifactId>
<version>6.9.0version>
<scope>testscope>
dependency>
2、编写feature脚本
cumuber默认的feature脚本路径是test\resources目录,如果没有,我们创建resources目录,我们创建一个简单的add.feature
这时候,我们的测试用例后边都是白色的背景色。我们需要创建相关的java文件。我们alt+enter。进行创建。
随便写点,括号表示传入的参数。
3、编写测试用例
4、执行单测
右键我们的feature文件
5、与spring的整合
BDD存在的问题
comuber不能mock,因为所采用的junit不是同一junit。
就到这里吧,冬天来了,注意不要感冒流鼻涕!