当前位置: 首页 > news >正文

个人网站怎么做代码外贸平台推广公司

个人网站怎么做代码,外贸平台推广公司,网站的注册,搭建高端网站目录 1. 什么是单元测试2. 为什么要单元测试3. 单元测试框架 - JUnit3.1 JUnit 简介3.2 JUnit 内容3.3 JUnit 使用3.3.1 Controller 层单元测试3.3.2 Service 层单元测试3.3.3 Dao 层单元测试3.3.4 异常测试3.3.5 测试套件测多个类3.3.6 idea 中查看单元测试覆盖率3.3.7 JUnit … 目录 1. 什么是单元测试2. 为什么要单元测试3. 单元测试框架 - JUnit3.1 JUnit 简介3.2 JUnit 内容3.3 JUnit 使用3.3.1 Controller 层单元测试3.3.2 Service 层单元测试3.3.3 Dao 层单元测试3.3.4 异常测试3.3.5 测试套件测多个类3.3.6 idea 中查看单元测试覆盖率3.3.7 JUnit 插件自动生成单测代码3.3.8 常用注解和配置 1. 什么是单元测试 单元测试是软件开发中常用的一种测试方法用于验证代码的单个功能单元是否按照预期工作。 测试方法 白盒测试White Box Testing在白盒测试中测试人员了解代码的内部结构和实现细节编写测试用例来覆盖不同的代码路径和逻辑条件。黑盒测试Black Box Testing黑盒测试不考虑代码的内部实现而是基于需求规格说明或功能规范编写测试用例测试程序的输入和输出是否符合预期。单元测试框架使用单元测试框架可以简化单元测试的编写和执行。常见的单元测试框架包括JUnitJava、NUnit.NET、pytestPython等。断言Assertion在单元测试中断言用于检查预期结果和实际结果是否匹配。测试人员可以使用断言来验证程序的特定行为和结果。边界值测试Boundary Value Testing边界值测试通过选择测试用例中的边界条件例如最小值、最大值、临界值等来验证程序在边界情况下的行为。异常处理测试Exception Handling Testing异常处理测试用于验证程序在遇到异常情况时是否能够正确地捕获和处理异常并保证系统的稳定性和可靠性。参数化测试Parameterized Testing参数化测试允许在单个测试用例中使用不同的参数进行多次测试以增加测试覆盖率和复用性。 这些方法都可以根据具体的需求和开发环境选择使用。单元测试的目标是尽可能地覆盖代码确保每个单元都能按照预期工作并提高软件的质量和可维护性。 这些方法都可以根据具体的需求和开发环境选择使用。单元测试的目标是尽可能地覆盖代码确保每个单元都能按照预期工作并提高软件的质量和可维护性。 2. 为什么要单元测试 1单元测试意义 程序代码都是由基本单元不断组合成复杂的系统底层基本单元都无法保证输入输出正确性层级递增时问题就会不断放大直到整个系统崩溃无法使用。所以单元测试的意义就在于保证基本功能是正常可用且稳定的。而对于接口、数据源等原因造成的不稳定因素是外在原因不在单元测试考虑范围之内。 2使用 main 方法进行测试 PostMapping(/add) public void addStudent(RequestBody Student student){studentService.save(student); }假如要对上面的 Controller 进行测试可以编写如下的代码示例使用 main 方法进行测试的时候先启动整个工程应用然后编写 main 方法如下进行访问在单步调试代码。 public static void main(String[] args) {RestTemplate restTemplate new RestTemplate();HttpHeaders httpHeaders new HttpHeaders();httpHeaders.setContentType(MediaType.APPLICATION_JSON);String json {\id\:4,\name\:\阿狸\,\classname\:\初三一班\,\age\:16,\sex\:\女\};HttpEntityString httpEntity new HttpEntity(json, httpHeaders);String url http://localhost:8080/student/add;ResponseEntityMap responseEntity restTemplate.postForEntity(url, httpEntity, Map.class);System.out.println(responseEntity.getBody()); }3使用 main 方法进行测试的缺点 通过编写大量的 main 方法针对每个内容做打印输出到控制台枯燥繁琐不具备优雅性。 测试方法不能一起运行结果需要程序员自己判断正确性。 统一且重复性工作应该交给工具去完成。 3. 单元测试框架 - JUnit 3.1 JUnit 简介 Unit 官网https://junit.org/。JUnit 是一个用于编写可重复测试的简单框架。它是用于单元测试框架的 xUnit 体系结构的一个实例。 JUnit 的特点 1 针对于 Java 语言特定设计的单元测试框架使用非常广泛。 2 特定领域的标准测试框架。 3 能够在多种 IDE 开发平台使用包含 Idea、Eclipse 中进行集成。 4 能够方便由 Maven 引入使用。 5 可以方便的编写单元测试代码查看测试结果等。 JUnit 的重要概念 名称功能作用Assert断言方法集合TestCase表示一个测试案例TestSuite包含一组 TestCase构成一组测试TestResult收集测试结果 JUnit 的一些注意事项及规范 1 测试方法必须使用 Test 修饰 2 测试方法必须使用 public void 进行修饰不能带参数 3 测试代码的包应该和被测试代码包结构保持一致 4 测试单元中的每个方法必须可以独立测试方法间不能有任何依赖 5 测试类一般使用 Test 作为类名的后缀 6 测试方法使一般用 test 作为方法名的前缀 JUnit 失败结果说明 1 Failure测试结果和预期结果不一致导致表示测试不通过 2 error由异常代码引起它可以产生于测试代码本身的错误也可以是被测代码的 Bug 3.2 JUnit 内容 1 断言的 API 断言方法断言描述assertNull(String message, Object object)检查对象是否为空不为空报错assertNotNull(String message, Object object)检查对象是否不为空为空报错assertEquals(String message, Object expected, Object actual)检查对象值是否相等不相等报错assertTrue(String message, boolean condition)检查条件是否为真不为真报错assertFalse(String message, boolean condition)检查条件是否为假为真报错assertSame(String message, Object expected, Object actual)检查对象引用是否相等不相等报错assertNotSame(String message, Object unexpected, Object actual)检查对象引用是否不等相等报错assertArrayEquals(String message, Object[] expecteds, Object[] actuals)检查数组值是否相等遍历比较不相等报错assertArrayEquals(String message, Object[] expecteds, Object[] actuals)检查数组值是否相等遍历比较不相等报错assertThat(String reason, T actual, Matcher? super T matcher)检查对象是否满足给定规则不满足报错 2 JUnit 常用注解 1 Test: 定义一个测试方法 Test (exceptedxx.class): xx.class 表示异常类表示测试的方法抛出此异常时认为是正常的测试通过的 Test (timeout 毫秒数) : 测试方法执行时间是否符合预期。 2 BeforeClass 在所有的方法执行前被执行static 方法全局只会执行一次而且第一个运行。 3 AfterClass在所有的方法执行之后进行执行static 方法全局只会执行一次最后一个运行。 4 Before在每一个测试方法被运行前执行一次。 5 After在每一个测试方法运行后被执行一次。 6 Ignore所修饰的测试方法会被测试运行器忽略。 7 RunWith可以更改测试执行器使用 junit 测试执行器。 3.3 JUnit 使用 3.3.1 Controller 层单元测试 1 Springboot 中使用 maven 引入 Junit 非常简单使用如下依赖即可引入 dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope /dependencydependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversion4.13.1/versionscopetest/scope /dependency2 上面使用 main 方法案例可以使用如下的 Junit 代码完成 RunWith(SpringRunner.class) SpringBootTest(classes UnittestDemoApplication.class) class StudentControllerTest {Autowiredprivate WebApplicationContext webApplicationContext;private MockMvc mockMvc;BeforeEachvoid setUp() {mockMvc MockMvcBuilders.webAppContextSetup(webApplicationContext).build();}Testvoid testAddStudent() throws Exception {// 创建一个Student对象作为请求的JSON体Student student new Student();student.setId(6);student.setName(小乔);student.setClassname(初二三班);student.setAge(14);student.setSex(女);// 将Student对象转换为JSON字符串ObjectMapper objectMapper new ObjectMapper();String json objectMapper.writeValueAsString(student);// 发送POST请求mockMvc.perform(MockMvcRequestBuilders.post(/student/add).contentType(MediaType.APPLICATION_JSON_UTF8).accept(MediaType.APPLICATION_JSON_UTF8).content(json))// 断言返回的状态码为200.andExpect(MockMvcResultMatchers.status().isOk())// 断言返回的JSON中包含指定的code和message.andExpect(MockMvcResultMatchers.jsonPath($.code).value(200)).andExpect(MockMvcResultMatchers.jsonPath($.message).value(保存成功)).andDo(MockMvcResultHandlers.print());} }只需要在类或者指定方法上右键执行即可可以直接充当 postman 工作访问指定 url且不需要写请求代码这些都由工具自动完成。 3案例中相关组件介绍 本案例中构造 mockMVC 对象时也可以使用如下方式 Autowired private StudentController studentController; Before public void setupMockMvc(){// 初始化MockMvc对象mockMvc MockMvcBuilders.standaloneSetup(studentController).build(); }其中 MockMVC 是 Spring 测试框架提供的用于 REST 请求的工具是对 Http 请求的模拟无需启动整个模块就可以对 Controller 层进行调用速度快且不依赖网络环境。 使用 MockMVC 的基本步骤如下 mockMvc.perform 执行请求MockMvcRequestBuilders.post 或 get 构造请求MockHttpServletRequestBuilder.param 或 content 添加请求参数MockMvcRequestBuilders.contentType 添加请求类型MockMvcRequestBuilders.accept 添加响应类型ResultActions.andExpect 添加结果断言ResultActions.andDo 添加返回结果后置处理ResultActions.andReturn 执行完成后返回相应结果 3.3.2 Service 层单元测试 可以编写如下代码对 Service 层查询方法进行单测 正例 RunWith(SpringRunner.class) SpringBootTest public class StudentServiceTest {Autowiredprivate StudentService studentService;Testpublic void getOne(){Student stu studentService.getById(1);Assert.assertThat(stu.getName(), CoreMatchers.is(张三));} }执行结果 反例 RunWith(SpringRunner.class) SpringBootTest public class StudentServiceTest {Autowiredprivate StudentService studentService;Testpublic void getOne(){Student stu studentService.getById(1);Assert.assertThat(stu.getName(), CoreMatchers.is(李四));} }执行结果 3.3.3 Dao 层单元测试 可以编写如下代码对 Dao 层保存方法进行单测 RunWith(SpringRunner.class) SpringBootTest public class StudentDaoTest {Autowiredprivate StudentMapper studentMapper;TestRollback(value true)Transactionalpublic void insertOne() throws Exception {Student student new Student();student.setId(7);student.setName(王五);student.setClassname(大一);student.setAge(20);student.setSex(男);int count studentMapper.insert(student);Assert.assertEquals(1, count);} }其中 Rollback (value true) 可以执行单元测试之后回滚所新增的数据保持数据库不产生脏数据。 3.3.4 异常测试 1 在 service 层定义一个异常情况 public void computeScore() {int a 10, b 0;int c a/b; }2 在 service 的测试类中定义单元测试方法 反例 Testpublic void computeScoreTest() {studentService.computeScore();}结果 正例 junit 5.0版本之前在Test上添加expected ArithmeticException.class Test(expected ArithmeticException.class)public void computeScoreTest() {studentService.computeScore();}junit 5.0版本之后使用Assert.assertThrows Test public void computeScoreTest() {Assert.assertThrows(ArithmeticException.class, () - {studentService.computeScore(); // This line should throw ArithmeticException}); }3 执行单元测试也会通过原因是 Test 注解中的定义了异常 3.3.5 测试套件测多个类 1 新建一个空的单元测试类 2 利用注解 RunWith (Suite.class) 和 SuiteClasses 标明要一起单元测试的类 运行结果 3.3.6 idea 中查看单元测试覆盖率 1 单测覆盖率 测试覆盖率是衡量测试过程工作本身的有效性提升测试效率和减少程序 bug提升产品可靠性与稳定性的指标。 统计单元测试覆盖率的意义 1 可以洞察整个代码中的基础组件功能的所有盲点发现相关问题。 2 提高代码质量通常覆盖率低表示代码质量也不会太高因为单测不通过本来就映射出考虑到各种情况不够充分。 3 从覆盖率的达标上可以提高代码的设计能力。 2 在 idea 中查看单元测试覆盖率很简单只需按照图中示例的图标运行或者在单元测试方法或类上右键 Run ‘xxx’ with Coverage 即可。执行结果是一个表格列出了类、方法、行数、分支覆盖情况。 3 在代码中会标识出覆盖情况绿色的是已覆盖的红色的是未覆盖的。 4 如果想要导出单元测试的覆盖率结果可以使用如下图所示的方式勾选 Open generated HTML in browser 导出结果 3.3.7 JUnit 插件自动生成单测代码 1 安装插件 2选择要生成单元测试的类按AltInsert出现如下界面选择TestMe自动生成文件 3选择需要的生成模板可以根据自己实际引入的依赖选择此处选择Junit4Mockito 4生成的代码如下可以生成一些基本的方法和注解然后根据实际情况修改可以节省一部分工作量。 3.3.8 常用注解和配置 Mock创建一个模拟的对象类似于Autowired但不是真实的对象是Mock对象这个注解使用在类属性上 InjectMocks创建一个实例其余用Mock注解创建的mock将被注入到用该实例中这个注解使用在类属性上 RunWith表示一个运行器RunWith(PowerMockRunner.class)表示指定用PowerMockRunner运行这个注解使用在类上 PowerMockIgnore这个注解表示将某些类延迟到系统类加载器加载解决一些类加载异常。具体类加载异常实际中还未遇见后续补充这个注解在类和方法上使用 PrepareForTest这个注解告诉PowerMock为测试准备某些类通常是那些需要字节码操作的类。这包括带有final、private、static或native方法的类new一个对象时需要特殊处理见下面的whenNew这个注解在类和方法上使用 TestTest修饰的public void方法可以作为测试用例运行。Junit会构造一个新的类实例然后调用所有加了Test的方法方法执行过程中的任何异常都会被判定为测试用例执行失败。 BeforeBefore注解的方法中的代码会在Test注解的方法中首先被执行。可以做一些公共的前置操作加入一些申请资源的代码申请数据库资源申请io资源申请网络资源new一些公共的对象等等。 AfterAfter注解的方法中的代码会在Test注解的方法中首先被执行。可以做一些公共的后置操作如关闭资源的操作。 注可以查看注解上的注释了解其大致用法。 代码地址GitHub 单元测试之Mockito见文章《【单元测试】单元测试之Mockito的使用》 觉得有用的话还请来个三连!!!
http://www.zqtcl.cn/news/870533/

相关文章:

  • 网站建设教程搭建浊贝湖南岚鸿给力企业网站定制公司
  • 网站建设与数据库维护 pdf廊坊seo关键字排名
  • 十元精品店做网站微信开发网站制作
  • 做乡镇网站地图上搜索不到的公司正规吗
  • 新材料 东莞网站建设多wordpress整合
  • 17做网店这个网站做起多少钱中信建设有限责任公司招标平台
  • 做慕课的网站一线设计公司
  • 官方网站app最新下载陕西建设厅八大员官方网站
  • 个体户可以备案网站吗运营
  • 政务网站模版建一个团购网站
  • 信用网站建设方案软文内容
  • PHP网站开发方向企业宣传片制作公司光年映画
  • 满城住房和城乡建设局网站上海最好的网站是什么
  • 网站建设合作网络营销是什么模式
  • 做个网站怎样做的网站建设刂搜金手指下拉贰肆
  • 颍上网站建设个人租车网站源码
  • 建设银行海外招聘网站顺义公司建站多少钱
  • 医疗公司网站建设项目背景你做的网站可视区域多少钱
  • 韩国做暖暖网站怎么样自己建设一个网站
  • 徐州网站建设4禁止wordpress历史版本
  • 公司网站建设价格wordpress做排行榜单
  • 安徽网站推广营销设计请教个人主页网站怎么做啊
  • 甘肃省酒泉市做网站公司wordpress标签云代码
  • 淘宝客做网站备注怎么写的用手机做网站视频
  • 深圳专业网站建设制作价格低品牌网站建设网站
  • 织梦体育网站模板临沂建站程序
  • 重庆网站设计最佳科技好听的网络公司名字
  • 如何在人力资源网站做合同续签贵阳网站建设搜王道下拉
  • 多个域名的网站北京注册公司流程
  • 网站建站对象定制网站系统