网站建设项目招标标书,注册资金是什么意思,企业内部网站如何建设,泉州服装网站建设单元测试#xff08;Unit Testing#xff09;又称为模块测试, 是针对程序模块#xff08;软件设计的最小单位#xff09;来进行正确性检验的测试工作。 程序单元是应用的最小可测试部件。简单来说#xff0c;就是测试数据的稳定性是否达到程序的预期。 我们日常开发时可能…单元测试Unit Testing又称为模块测试, 是针对程序模块软件设计的最小单位来进行正确性检验的测试工作。 程序单元是应用的最小可测试部件。简单来说就是测试数据的稳定性是否达到程序的预期。 我们日常开发时可能在不经意间写错如果等到最后阶段去检验项目成果时发现有错误这时候我们很难找到Bug的源头在哪里。我们都知道有可能一处出错会导致步步错的情况。
测试就在我们的上述说法中显得尤为重要当我们做完项目的一个小模块先去测试一下这个小模块是否正确或达到预期如果错误或者没有达到预期就需要反复修改直到正确或达到预期也就是使用了单元测试。
单元测试的编码规范一般涉及到以下内容
类名 定义测试类类名是由被测试类名Test构成。例如CalculatorTest;
包名定义的测试类需要放在xxx.xxx.xxx.test包中。例如package com.autodrive.test;
方法名 测试方法的方法名有两种定义方式test测试方法和测试方法。例如testCheck和check;
返回值 因为我们的方法只是在类中测试可以独立运行所以不需要处理任何返回值所以这里使用void。例如public void check();
参数列表 因为我们的方法是用来测试的至于参数列表的传入是没有必要的。我们在测试的时候自行传入需要的参数测试即可。所以在此参数列表为空。例如例如public void check();
Test注解 测试是需要运行来完成的。如果我们只有一个main方法显然在结构上还是需要我们去注释掉测试过的。解决此问题这里我们需要在测试方法上方加Test注解来完成测试只要是加该注解的方法可以单独运行此方法来完成测试。
IDEA快捷导入Junit4、5 使用IDEA的小伙伴你们的福音来了。我们可以先创建测试类和方法然后在测试方法上方加入Test注解此时IDEA显示的Test注解是飘红的这时候我们使用Alt Enter组合键来打开导入Junit单元测试列表然后再选择Junit4或者Junit5确定。
在SpringBoot往往存在单元测试用到如下的注解与写法 RunWith(SpringRunner.class) SpringBootTest(classes Application.class) Transactional Rollback(true) // 事务自动回滚默认是true。可以不写 public class NoticeServiceTest { Autowired private NoticeService noticeService; Test public void sayHello() { helloService.sayHello(zhangsan); } } 在上面这个例子中SpringBootTest启动了SpringBoot环境扫描应用程序的spring配置并构建完整的Spring Context其classes Application.class启动了整个项目。通过SpringBootTest我们可以指定启动类或者给SpringBootTest的参数webEnvironment赋值为SpringBootTest.WebEnvironment.RANDOM_PORT这样就会启动web容器并监听一个随机的端口同时为我们自动装配一个TestRestTemplate类型的bean来辅助我们发送测试请求。
Transactional表明调用数据库并作事务处理RunWith(SpringRunner.class)声明在Spring的环境中进行单元测试这样Spring的相关注解就会被识别并起效而Autowired启动了Spring。
当项目使用了Component注解在SpringBoot项目启动的时候就会跟着实例化/启动这个Component注解的类里有多线程方法随着启动类中定义的ApplicationStartup类启动了那么在你执行单元测试的时候由于多线程任务的影响就可能对你的数据库造成了数据修改即使你使用了事务回滚注解。
高效的单元测试应该脱离数据库以满足快速启动完成测试、支持服务间调用的需求。可以通过如下几点来对上述例子进行优化
1. 启动Spring会让run-Junit Test的时候程序变慢这是每次运行单元测试都很慢的原因之一。然后单元测试是只针对某一个类的方法来测启动Spring很多时候是多余的所以我们只需要对应的实体类实例就够了。在需要注入bean的时候我们直接new。 private NoticeService noticeService new NoticeService(); 2. SpringBootTest是在SpringBoot项目上使用的它在SpringBootContextLoader的基础上配置文件属性的读取会读取、解析一些项目配置文件还会连接数据库然后如果启动类又带有别的启动类、Component、多线程等而单元测试很多时候可以避免启动SpringBoot减少启动所耗费的大量时间即不使用SpringBootTest注解。
3. 应当使用断言来判断单元测试结果是否符合预期。
4. RunWith 在JUnit中有很多个Runner他们负责调用具体测试代码每一个Runner都有各自的特殊功能你要根据需要选择不同的Runner来运行你的测试代码且一般都是使用SpringRunner.class。如果我们只是简单的做普通Java测试不涉及Spring Web项目可以省略RunWith注解这样系统会自动使用默认Runner来运行你的代码。
5.单元测试可以通过Mock数据的方式避开对数据库的调用减少很多数据库连接的时间。Mock是模拟一切操作数据库的步骤不执行任何SQL我们直接模拟这句操作数据库的代码执行会是成功的而且可以模拟任何返回值主要有两个注解。只要是本地的自己写的bean都可以使用MockBean它会把所有操作数据库的方法模拟。如果是没有返回值的方法我们就可以不管。如果是有返回值的方法我们可以给它返回各自我们需要模拟的值。如果是我们本地调用别的公司别的地方给我们写好的接口不是操作我们自己的数据库是我们写好入参别人给我们返回值我们就用SpyBean。
Mock所需依赖如下 dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-test/artifactId scopetest/scope /dependency 通过以上优化可以大大缩短我们单测的时间提高我们开发效率。 【整整200集】超超超详细的Python接口自动化测试进阶教程合集真实模拟企业项目实战