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

测试|Junit相关内容

测试|Junit相关内容

文章目录

  • 测试|Junit相关内容
    • 0.Junit说明
    • 1.Junit注解
      • @Test
      • @Disabled
      • @BeforeAll和@AfterAll
      • @BeforeEach和@AfterEach
    • 2.Junit参数化
      • 单参数
      • 多参数(多种/多组)
        • CSV获取参数(支持多种)
        • CSV文件获取参数(支持多种多组)
        • 方法获取参数(支持多种多组)
      • 补充:
    • 3.Junit测试用例执行顺序
      • 手动指定执行顺序(OrderAnnotation)
      • 随机执行顺序(Random)
    • 4.断言
      • 断言相等和断言不相等
      • 断言为空和断言不为空
    • 5.Junit测试套件
    • 常见问题
      • No tests were found

0.Junit说明

Junit是针对Java进行单元测试的一种框架。

注:这里使用的版本是Junit5,前边写的Selenium是Selenium5

1.Junit注解

@Test

表示当前方法是一个测试用例。

测试用例跑过了:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QN8T6FJ8-1690872547538)(F:\typora插图\image-20230801085852858.png)]

测试用例跑不过:(只跑一个,跑全部的)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4aJA9SZn-1690872547539)(F:\typora插图\image-20230801090615074.png)]

@Disabled

表示忽略当前测试用例,跳过当前测试用例

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xrhll6DA-1690872547540)(F:\typora插图\image-20230801091522574.png)]

@BeforeAll和@AfterAll

含义:@BeforeAll:所有测试用例跑之前跑的,@AfterAll:所有测试用例跑完后跑的

说明:

  1. 这两个注解下的方法需要是静态的
  2. 一般初始化放在BeforeAll所在方法中,关闭资源放在AfterAll中
  3. 如果做UI自动化,通常情况下,创建驱动,打开网页,放到BeforeAll中;关闭浏览器放到AfterAll中

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZhD92a7H-1690872547540)(F:\typora插图\image-20230801092207325.png)]

@BeforeEach和@AfterEach

@BeforeEach&@AfterEach 和 @BeforeAll和@AfterAll区别:

  1. @BeforeAll是在所有测试用例之前跑一次相应的方法
  2. @BeforeEach是在每个测试用例之前跑一次相应的方法
  3. @AfterEach 是在每个测试用例之后跑一次相应的方法
  4. @AfterAll是在所有测试用例之后跑一次相应的方法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LsjcYNCc-1690872547541)(F:\typora插图\image-20230801092856948.png)]

2.Junit参数化

不进行参数注册,就往注解下的方法中传参,会报错,这个时候就需要引入相关依赖,进行参数注册

<!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-params -->
<dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-params</artifactId><version>5.9.1</version><scope>test</scope>
</dependency>

注意:这里的scope还是需要注释掉

其中@ParameterizedTest表明当前方法为参数化测试方法

单参数

这里的单不是单个,而是单种,只不过这一种参数下可以有一个参数也可以有多个参数

使用方法:在方法上加上两个注解:@ParameterizedTest,@ValueSource(类型名s={xxxxxx})

传参与入参

@ParameterizedTest
@ValueSource(strings={"1","2","3"})
void test05(String num){System.out.println(num);
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-z4NCLEmK-1690872547542)(F:\typora插图\image-20230801094303684.png)]

多参数(多种/多组)

其实我觉得这里如果是多个参数,对象包装一下会比较方便即对象单参数获取,如果是多个对象就是对象数组。

CSV获取参数(支持多种)

@CsvSource注释的值是一个字符串数组,每个字符串表示一组参数

每个参数对应一列

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5sX2G93I-1690872547542)(F:\typora插图\image-20230801103650424.png)]

入参的个数大于形参的情况:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YWF0x5oT-1690872547543)(F:\typora插图\image-20230801103908859.png)]

空字符串的传递:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pWukbtyN-1690872547543)(F:\typora插图\image-20230801104056120.png)]

不同类型的一组参数:(主要看第三种情况)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xIn0Jq3d-1690872547544)(F:\typora插图\image-20230801111457162.png)]

CSV文件获取参数(支持多种多组)

当存在多种参数的时候,使用ValueSource不再方便,使用csv文件更加方便。

1.类型的相同的多组

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8OIS4ROt-1690872547544)(F:\typora插图\image-20230801100723844.png)]

2.类型不相等的多组

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Cw7FaqjQ-1690872547544)(F:\typora插图\image-20230801110745603.png)]

方法获取参数(支持多种多组)

有时参数不能直接生成,我们就需要使用方法获取参数的方式

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rnM9EIqE-1690872547545)(F:\typora插图\image-20230801101608162.png)]

补充:

在这里插入图片描述

虽然不能完全理解,也不知道到底是哪些类实现了这些接口,但是从这些源码大概能知道单参数的时候起码是数组,一定程度上可以帮助理解。

3.Junit测试用例执行顺序

public class JunitTest01 {@Testvoid testB(){System.out.println("testB的测试用例");}@Testvoid test01(){System.out.println("test01的测试用例");}@Testvoid test02(){System.out.println("test02的测试用例");}@Testvoid testA(){System.out.println("testA的测试用例");}
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8pFPffRq-1690872547545)(F:\typora插图\image-20230801112340280.png)]

为什么执行顺序是固定的?

因为Junit有自己执行顺序的算法,如果想要指定执行顺序需要特殊处理

手动指定执行顺序(OrderAnnotation)

@TestMethodOrder(MethodOrderer .OrderAnnotation.class)
public class JunitTest01 {@Order(1)@Testvoid testB(){System.out.println("testB的测试用例");}@Order(2)@Testvoid test01(){System.out.println("test01的测试用例");}@Order(3)@Testvoid test02(){System.out.println("test02的测试用例");}@Order(4)@Testvoid testA(){System.out.println("testA的测试用例");}
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ektrtvMx-1690872547546)(F:\typora插图\image-20230801112819652.png)]

随机执行顺序(Random)

@TestMethodOrder(MethodOrderer.Random.class)
//@TestMethodOrder(MethodOrderer .OrderAnnotation.class)
public class JunitTest01 {
//    @Order(1)@Testvoid testB(){System.out.println("testB的测试用例");}
//    @Order(2)@Testvoid test01(){System.out.println("test01的测试用例");}
//    @Order(3)@Testvoid test02(){System.out.println("test02的测试用例");}
//    @Order(4)@Testvoid testA(){System.out.println("testA的测试用例");}
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-j9r3ZhcM-1690872547546)(F:\typora插图\image-20230801113328137.png)]

4.断言

测试用例需要有校验,需要把执行结果和预期结果进行对比。使用assert关键字。

断言相等和断言不相等

断言相等:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6WXYibkj-1690872547547)(F:\typora插图\image-20230801114756634.png)]

断言不相等:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1NnlIvcc-1690872547548)(F:\typora插图\image-20230801114510217.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xMHFDp2p-1690872547548)(F:\typora插图\image-20230801114722836.png)]

当断言数组时,可以使用 assertArrayEquals 方法来比较两个数组是否相等。以下是一个示例:

import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertArrayEquals;public class ArrayAssertionTest {@Testpublic void testArrayEquals() {int[] expected = {1, 2, 3, 4};int[] actual = {1, 2, 3, 4};assertArrayEquals(expected, actual);}
}

在上述示例中,assertArrayEquals 方法将会比较两个数组 expectedactual 是否相等。如果数组内容相同,则断言通过,否则断言失败。

断言为空和断言不为空

期待是不为空和期待是空:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XZiq0Xmo-1690872547549)(F:\typora插图\image-20230801115111257.png)]

5.Junit测试套件

测试套件的相关操作需要引入相关依赖,注意,因为这里是在main文件夹下而不是在test文件夹下,所以记得把scope这个标签注释掉

<dependency><groupId>org.junit.platform</groupId><artifactId>junit-platform-suite-api</artifactId><version>1.9.1</version>
<!--            <scope>test</scope>--></dependency><!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-engine --><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-engine</artifactId><version>5.9.1</version>
<!--            <scope>test</scope>--></dependency>

使用方法有两种,一种是通过class,另外一种是通过包。

对应的注解分别是@SelectClasses,@SelectPackage

@Suite
//通过class测试用例运行
@SelectClasses({JunitTest.class,JunitTest01.class})//通过包
//@SelectPackages(value = {"package01","package02"})
public class RunSuite {}
public class Test01 {@Testpublic void test01(){System.out.println("package01-->test01");}
}
public class Test01 {@Testpublic void test01(){System.out.println("package02-->test01");}
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-d2mj1eiv-1690872547549)(F:\typora插图\image-20230801143349213.png)]

常见问题

No tests were found

原因1:这是@Test注解方法的权限问题,类中方法默认权限是default,

对于@Test注解的方法,我们可以选择写public,也可以选择不写。

如果写成private,当前方法就不能被识别出是一个测试用例了。

解决办法:改成public,或去掉private


原因2:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PTPtCo8o-1690872547549)(F:\typora插图\image-20230801121136525.png)]

同样的标签需要导两次…

<dependency><groupId>org.seleniumhq.selenium</groupId><artifactId>selenium-java</artifactId><version>3.141.59</version></dependency><!-- https://mvnrepository.com/artifact/commons-io/commons-io --><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.11.0</version></dependency><!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api --><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-api</artifactId><version>5.9.1</version></dependency><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-params</artifactId><version>5.9.1</version></dependency><!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-params --><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-params</artifactId><version>5.9.1</version></dependency><dependency><groupId>org.junit.platform</groupId><artifactId>junit-platform-suite</artifactId><version>1.9.1</version><scope>test</scope></dependency><!-- https://mvnrepository.com/artifact/org.junit.platform/junit-platform-suite --><dependency><groupId>org.junit.platform</groupId><artifactId>junit-platform-suite</artifactId><version>1.9.1</version></dependency><!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-engine --><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-engine</artifactId><version>5.9.1</version><scope>test</scope></dependency><version>1.9.1</version></dependency><!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-engine --><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-engine</artifactId><version>5.9.1</version><scope>test</scope></dependency>

原因3:方法不能有返回值

相关文章:

测试|Junit相关内容

测试|Junit相关内容 文章目录 测试|Junit相关内容0.Junit说明1.Junit注解TestDisabledBeforeAll和AfterAllBeforeEach和AfterEach 2.Junit参数化单参数多参数&#xff08;多种/多组&#xff09;CSV获取参数&#xff08;支持多种&#xff09;CSV文件获取参数&#xff08;支持多种…...

19-2.vuex

目录 1 安装 2 挂载 2.1 vue2写法 2.2 vue3写法 3 state 3.1 声明数据 3.2 使用数据 3.3 处理数据 4 mutations 4.1 基本使用 4.2 传递参数 4.3 mutations中不能写异步的代码 5 actions 5.1 基本使用 5.2 传递参数 6 getters Vuex是做全局数据…...

微信小程序 选择年和月以及回显 使用picker-view组件

<!--选择年月--><view bindtap"pickCalendar">{{year}}年{{month}}月</view><picker-view wx:if"{{open}}" class"fixed-select" indicator-style"height: 50px;" style"width: 100%; height: 300px;"…...

助力工业物联网,工业大数据之ST层的设计【二十五】

文章目录 04&#xff1a;ST层的设计05&#xff1a;服务域&#xff1a;工单主题分析06&#xff1a;服务域&#xff1a;工单主题实现 04&#xff1a;ST层的设计 目标&#xff1a;掌握ST层的设计 路径 step1&#xff1a;功能step2&#xff1a;来源step3&#xff1a;需求 实施 功…...

MySQL实践——参数SQL_SLAVE_SKIP_COUNTER的奥秘

每次数据库复制冲突之后&#xff0c;经常使用的一个命令如下。 SET GLOBAL SQL_SLAVE_SKIP_COUNTER 1;一般会认为&#xff0c;现在出现冲突错误&#xff0c;那就将上面参数值设置为1&#xff0c;跳过出错的这个event就可以解决了。重新启动复制&#xff0c;发现问题果然解决&…...

小程序面试题

文章目录 简单谈谈微信小程序小程序的原生组件有哪些小程序的安卓版和ios版是怎么开发出来uni-app弹窗被覆盖怎么解决小程序生命周期小程序路由跳转小程序的兼容问题有哪些小程序框架都掌握哪一些,uniapp都会哪一些,平时开发遇到的困难上传图片uni-app h5 端的ios图片不能加载…...

微信小程序接入腾讯云天御验证码

腾讯云新一代行为验证码&#xff08;Captcha&#xff09;&#xff0c;基于十道安全防护策略&#xff0c;为网页、APP、小程序开发者打造立体、全面的人机验证。在保护注册登录、活动秒杀、点赞发帖、数据保护等各大场景下业务安全的同时&#xff0c;提供更精细化的用户体验。 …...

Docker build 命令详解

build 命令用于使用 Dockerfile 创建镜像。 语法&#xff1a; $ docker build [OPTIONS] PATH | URL | -OPTIONS 说明 # 可通过帮助命令查看 $ docker build --help--build-arg[]: 设置镜像创建时的变量--cpu-shares: 设置 cpu 使用权重--cpu-period: 限制 CPU、CFS 周期--cpu…...

基于Translators的多语言翻译解决方案

当Translators库,一个用Python为个人和学生提供免费、多样、愉快翻译的库。 文章目录 Translators支持的翻译服务安装与入门参数和功能支持的语言调试和运行环境API服务Translators Translators库是一个强大的Python库,旨在为个人和学生提供免费、多样、愉快的翻译体验。它支…...

Unity 性能优化五:渲染模块压力

CPU压力 Batching 在GPU渲染前&#xff0c;CPU会把数据按batch发送给GPU&#xff0c;每发送一次&#xff0c;都是一个drawcall&#xff0c;GPU在渲染每个batch的时候&#xff0c;会切换渲染状态&#xff0c;这里的渲染状态指的是&#xff1a;影响对象在屏幕上的外观的渲染属性…...

Redis数据库 | 事务、持久化

&#x1f497;wei_shuo的个人主页 &#x1f4ab;wei_shuo的学习社区 &#x1f310;Hello World &#xff01; Redis事务操作 Redis事务是一组命令的集合&#xff0c;这些命令会作为一个整体被执行&#xff0c;要么全部执行成功&#xff0c;要么全部执行失败&#xff1b;Redis事…...

浅析大数据时代下的视频技术发展趋势以及AI加持下视频场景应用

视频技术的发展可以追溯到19世纪初期的早期实验。到20世纪初期&#xff0c;电视技术的发明和普及促进了视频技术的进一步发展。 1&#xff09;数字化&#xff1a;数字化技术的发明和发展使得视频技术更加先进。数字电视信号具有更高的清晰度和更大的带宽&#xff0c;可以更快地…...

TensorRT学习笔记--基于YoloV8检测图片和视频

1--完整项目 完整项目地址&#xff1a;https://github.com/liujf69/TensorRT-Demo git clone https://github.com/liujf69/TensorRT-Demo.gitcd TRT_YoloV8 2--模型转换 cd yolov8python gen_wts.py 3--编译项目 mkdir buildcd build cmake .. # 需要更改 CMakeLists.txt…...

【C++】开源:matplotlib-cpp静态图表库配置与使用

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍matplotlib-cpp图表库配置与使用。 无专精则不能成&#xff0c;无涉猎则不能通。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&…...

香港IT软件开发服务公司Alpha Technology 申请纳斯达克IPO上市

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 猛兽财经获悉&#xff0c;总部位于中国香港的IT软件开发服务公司Alpha Technology 近期已向美国证券交易委员会&#xff08;SEC&#xff09;提交招股书&#xff0c;申请在纳斯达克IPO上市&#xff0c;股票代码为&#xff0…...

JavaScript:数组深拷贝

文章目录 1 数组深拷贝的意义2 数组深拷贝的常用方式2.1 使用 JSON 序列化和反序列化2.2 使用递归方法2.3 使用第三方库 1 数组深拷贝的意义 JavaScript中的数组深拷贝&#xff0c;指的是创建一个完全独立于原始数组的新数组&#xff0c;所有新数组的元素都是原始数组的副本。…...

干翻Dubbo系列第七篇:@EnableDubbo、@DubboService、@DubboReference注解的作用

文章目录 文章说明 一&#xff1a;EnableDubbo注解的作用 1&#xff1a;注解使用地点 2&#xff1a;注解作用 3&#xff1a;路径要求 4&#xff1a;指定路径 5&#xff1a;另外一种指定路径 二&#xff1a;DubboService注解的作用 1&#xff1a;注解作用 2&#xff1…...

clickhouse断电重启故障解决方案

业务场景 公司的一个日志系统用到了clickhouse。一线运维反映说有个生产环境因为异常断电造成服务器重启。在执行日志系统的启动脚本时&#xff0c;一直报clickhouse启动不起来&#xff0c;日志系统无法使用。 问题排查 通过阅读启动脚本代码&#xff0c;以及启动日志系统&a…...

Spring学习笔记之Bean的实例化方式

文章目录 通过构造方法实例化通过简单工厂模式实例化通过factory-bean实例化BeanFactory和FactoryBean的区别BeanFactoryFactoryBean 注入自定义Date Spring为Bean提供了多种实例化方式&#xff0c;通常包括4种方式。&#xff08;也就是说在Spring中为Bean对象的创建准备了很多…...

JVM-类加载器

1.前置知识 1.1CPU与内存交互图&#xff1a; 2.类加载器ClassLoader 在装载(Load)阶段&#xff0c;其中第(1)步:通过类的全限定名获取其定义的二进制字节流&#xff0c;需要借助类装 载器完成&#xff0c;顾名思义&#xff0c;就是用来装载Class文件的。 2.1什么是类加载器&a…...

Godot中型项目工程化实践:目录规范、资源引用与状态管理

1. 这不是续集&#xff0c;而是项目落地的分水岭“Godot 游戏引擎项目&#xff08;二&#xff09;”——看到这个标题&#xff0c;很多人第一反应是&#xff1a;“哦&#xff0c;上一篇讲了环境搭建和Hello World&#xff0c;这篇该讲节点树和信号了&#xff1f;”但我在带三个…...

2026年HR招聘偏好白皮书:这5项附加技能出现频率暴涨

2026 年的招聘市场&#xff0c;正在从“看你会什么岗位技能”&#xff0c;转向“看你能不能把岗位做得更智能”。HR筛简历时&#xff0c;越来越关注候选人的AI应用能力、数据化思维和业务落地能力。人社部近年发布的新职业中&#xff0c;已经出现生成式人工智能系统应用员、人工…...

Python 3.7 + XGBoost 多分类实战:从数据清洗到SHAP模型解释的保姆级教程

Python 3.7 XGBoost 多分类实战&#xff1a;从数据清洗到SHAP模型解释的保姆级教程在机器学习领域&#xff0c;XGBoost因其出色的性能和可解释性成为众多数据科学家的首选工具。本文将带您完整走过多分类任务的全流程&#xff0c;从原始数据到可解释的预测模型&#xff0c;每个…...

小米MIMO最新邀请码

欢迎使用&#xff0c;各得10元体验金...

深度解析HS2-HF Patch:从技术框架到创作工具链的完整升级方案

深度解析HS2-HF Patch&#xff1a;从技术框架到创作工具链的完整升级方案 【免费下载链接】HS2-HF_Patch Automatically translate, uncensor and update HoneySelect2! 项目地址: https://gitcode.com/gh_mirrors/hs/HS2-HF_Patch 你是否曾因Honey Select 2的原版体验受…...

对比按量计费与Token Plan套餐的实际成本差异

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 对比按量计费与Token Plan套餐的实际成本差异 在构建和运营基于大模型的应用时&#xff0c;成本控制是一个核心的工程考量。Taotok…...

基于C#实现(WinForm)P2P聊天程序

♻️ 资源 大小&#xff1a; 29.8MB ➡️ 资源下载&#xff1a;https://download.csdn.net/download/s1t16/87430269 p2p聊天程序 一、功能介绍 1.1 登录 用户凭用户名和密码登录系统&#xff0c;可以更换服务器 IP 和端口&#xff0c;以防网络不畅通&#xff0c;连接服务…...

基于Meshtastic构建LoRa Mesh网络:从硬件自制到传感器集成实战

1. 项目概述&#xff1a;构建一个灵活且易用的LoRa Mesh网络 如果你对物联网、远程传感或者去中心化通信网络感兴趣&#xff0c;那么LoRa技术一定不会陌生。它以其超低功耗、超远距离和强大的抗干扰能力&#xff0c;成为了构建广域传感网络的理想选择。然而&#xff0c;传统的…...

Claude Code + LM Studio + CC-Switch 本地自动化编程部署指南

Claude Code LM Studio CC-Switch 本地自动化编程部署指南 本指南汇总了在 Windows 本地环境下&#xff0c;使用 Claude Code 配合 LM Studio 本地模型、CC-Switch 代理进行自动化编程开发的完整配置方案。 目录 硬件与模型选型LM Studio 本地模型部署CC-Switch 代理配置Cla…...

从零开始的Linux#2 vim编辑器

介绍vi\vim是Linux中最经典的文本编辑器&#xff0c;vim是vi的全面升级版本&#xff0c;我们后面只用vim通过vim编辑器编辑文件&#xff0c;需要使用命令vim 文件路径如果文件路径表示的文件不存在&#xff0c;那么此命令会用于编辑新文件&#xff1b;如果存在则编辑已有文件模…...