测试|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)]](https://img-blog.csdnimg.cn/28e61c9fda30439aae1d6681ee92ee34.png)
测试用例跑不过:(只跑一个,跑全部的)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4aJA9SZn-1690872547539)(F:\typora插图\image-20230801090615074.png)]](https://img-blog.csdnimg.cn/a954c8c7a9214ec6829d520df0f75a30.png)
@Disabled
表示忽略当前测试用例,跳过当前测试用例
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xrhll6DA-1690872547540)(F:\typora插图\image-20230801091522574.png)]](https://img-blog.csdnimg.cn/725f6d6d14cb4fc8bb25e23abf5d9a38.png)
@BeforeAll和@AfterAll
含义:@BeforeAll:所有测试用例跑之前跑的,@AfterAll:所有测试用例跑完后跑的
说明:
- 这两个注解下的方法需要是静态的
- 一般初始化放在BeforeAll所在方法中,关闭资源放在AfterAll中
- 如果做UI自动化,通常情况下,创建驱动,打开网页,放到BeforeAll中;关闭浏览器放到AfterAll中
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZhD92a7H-1690872547540)(F:\typora插图\image-20230801092207325.png)]](https://img-blog.csdnimg.cn/dedc8ef5d0f148d49a80b6006130aae2.png)
@BeforeEach和@AfterEach
@BeforeEach&@AfterEach 和 @BeforeAll和@AfterAll区别:
- @BeforeAll是在所有测试用例之前跑一次相应的方法
- @BeforeEach是在每个测试用例之前跑一次相应的方法
- @AfterEach 是在每个测试用例之后跑一次相应的方法
- @AfterAll是在所有测试用例之后跑一次相应的方法
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LsjcYNCc-1690872547541)(F:\typora插图\image-20230801092856948.png)]](https://img-blog.csdnimg.cn/cc5fc93c41264c978f22a108a0518753.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)]](https://img-blog.csdnimg.cn/61605ec7779b4b74b451ae388407f61f.png)
多参数(多种/多组)
其实我觉得这里如果是多个参数,对象包装一下会比较方便即对象单参数获取,如果是多个对象就是对象数组。
CSV获取参数(支持多种)
@CsvSource注释的值是一个字符串数组,每个字符串表示一组参数
每个参数对应一列
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5sX2G93I-1690872547542)(F:\typora插图\image-20230801103650424.png)]](https://img-blog.csdnimg.cn/914f8ffca8d748c58b34abfc485da0b3.png)
入参的个数大于形参的情况:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YWF0x5oT-1690872547543)(F:\typora插图\image-20230801103908859.png)]](https://img-blog.csdnimg.cn/a6604022a52846c1888118b5f39a8f63.png)
空字符串的传递:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pWukbtyN-1690872547543)(F:\typora插图\image-20230801104056120.png)]](https://img-blog.csdnimg.cn/9bbe82171fb14e56b706510479197992.png)
不同类型的一组参数:(主要看第三种情况)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xIn0Jq3d-1690872547544)(F:\typora插图\image-20230801111457162.png)]](https://img-blog.csdnimg.cn/afb0adc4f794457095b6b06c2a777b93.png)
CSV文件获取参数(支持多种多组)
当存在多种参数的时候,使用ValueSource不再方便,使用csv文件更加方便。
1.类型的相同的多组
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8OIS4ROt-1690872547544)(F:\typora插图\image-20230801100723844.png)]](https://img-blog.csdnimg.cn/b61808ec9bfc48768aafb51ca6ef3e7d.png)
2.类型不相等的多组
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Cw7FaqjQ-1690872547544)(F:\typora插图\image-20230801110745603.png)]](https://img-blog.csdnimg.cn/486a9b7b5f6b49f8a20a31a082b30a72.png)
方法获取参数(支持多种多组)
有时参数不能直接生成,我们就需要使用方法获取参数的方式
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rnM9EIqE-1690872547545)(F:\typora插图\image-20230801101608162.png)]](https://img-blog.csdnimg.cn/f35298f1463b47bd80aeeca5c2df2f98.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)]](https://img-blog.csdnimg.cn/47b98ee5efab40fca3f1b9b22c94294c.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)]](https://img-blog.csdnimg.cn/20b0cdf21cd244639e1312f34aa383d4.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)]](https://img-blog.csdnimg.cn/ced9e20907ed4a7bbeef66f0d8aa1352.png)
4.断言
测试用例需要有校验,需要把执行结果和预期结果进行对比。使用assert关键字。
断言相等和断言不相等
断言相等:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6WXYibkj-1690872547547)(F:\typora插图\image-20230801114756634.png)]](https://img-blog.csdnimg.cn/81c3be8d45a545489f9f30a895ce9e78.png)
断言不相等:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1NnlIvcc-1690872547548)(F:\typora插图\image-20230801114510217.png)]](https://img-blog.csdnimg.cn/b13b770e966b4e099ecd27af4f24a5d0.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xMHFDp2p-1690872547548)(F:\typora插图\image-20230801114722836.png)]](https://img-blog.csdnimg.cn/9df75f07e36e48bc9bf5b5f2eb324cce.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 方法将会比较两个数组 expected 和 actual 是否相等。如果数组内容相同,则断言通过,否则断言失败。
断言为空和断言不为空
期待是不为空和期待是空:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XZiq0Xmo-1690872547549)(F:\typora插图\image-20230801115111257.png)]](https://img-blog.csdnimg.cn/207449c25cd54c1a92c6c99ce5d94c4b.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)]](https://img-blog.csdnimg.cn/ad12a0bd9a904f56aacf49a5cbe84088.png)
常见问题
No tests were found
原因1:这是@Test注解方法的权限问题,类中方法默认权限是default,
对于@Test注解的方法,我们可以选择写public,也可以选择不写。
如果写成private,当前方法就不能被识别出是一个测试用例了。
解决办法:改成public,或去掉private
原因2:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PTPtCo8o-1690872547549)(F:\typora插图\image-20230801121136525.png)]](https://img-blog.csdnimg.cn/15747958e4e746b783477dcb638226cf.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参数化单参数多参数(多种/多组)CSV获取参数(支持多种)CSV文件获取参数(支持多种…...
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:ST层的设计05:服务域:工单主题分析06:服务域:工单主题实现 04:ST层的设计 目标:掌握ST层的设计 路径 step1:功能step2:来源step3:需求 实施 功…...
MySQL实践——参数SQL_SLAVE_SKIP_COUNTER的奥秘
每次数据库复制冲突之后,经常使用的一个命令如下。 SET GLOBAL SQL_SLAVE_SKIP_COUNTER 1;一般会认为,现在出现冲突错误,那就将上面参数值设置为1,跳过出错的这个event就可以解决了。重新启动复制,发现问题果然解决&…...
小程序面试题
文章目录 简单谈谈微信小程序小程序的原生组件有哪些小程序的安卓版和ios版是怎么开发出来uni-app弹窗被覆盖怎么解决小程序生命周期小程序路由跳转小程序的兼容问题有哪些小程序框架都掌握哪一些,uniapp都会哪一些,平时开发遇到的困难上传图片uni-app h5 端的ios图片不能加载…...
微信小程序接入腾讯云天御验证码
腾讯云新一代行为验证码(Captcha),基于十道安全防护策略,为网页、APP、小程序开发者打造立体、全面的人机验证。在保护注册登录、活动秒杀、点赞发帖、数据保护等各大场景下业务安全的同时,提供更精细化的用户体验。 …...
Docker build 命令详解
build 命令用于使用 Dockerfile 创建镜像。 语法: $ 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渲染前,CPU会把数据按batch发送给GPU,每发送一次,都是一个drawcall,GPU在渲染每个batch的时候,会切换渲染状态,这里的渲染状态指的是:影响对象在屏幕上的外观的渲染属性…...
Redis数据库 | 事务、持久化
💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! Redis事务操作 Redis事务是一组命令的集合,这些命令会作为一个整体被执行,要么全部执行成功,要么全部执行失败;Redis事…...
浅析大数据时代下的视频技术发展趋势以及AI加持下视频场景应用
视频技术的发展可以追溯到19世纪初期的早期实验。到20世纪初期,电视技术的发明和普及促进了视频技术的进一步发展。 1)数字化:数字化技术的发明和发展使得视频技术更加先进。数字电视信号具有更高的清晰度和更大的带宽,可以更快地…...
TensorRT学习笔记--基于YoloV8检测图片和视频
1--完整项目 完整项目地址: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静态图表库配置与使用
😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍matplotlib-cpp图表库配置与使用。 无专精则不能成,无涉猎则不能通。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下&…...
香港IT软件开发服务公司Alpha Technology 申请纳斯达克IPO上市
来源:猛兽财经 作者:猛兽财经 猛兽财经获悉,总部位于中国香港的IT软件开发服务公司Alpha Technology 近期已向美国证券交易委员会(SEC)提交招股书,申请在纳斯达克IPO上市,股票代码为࿰…...
JavaScript:数组深拷贝
文章目录 1 数组深拷贝的意义2 数组深拷贝的常用方式2.1 使用 JSON 序列化和反序列化2.2 使用递归方法2.3 使用第三方库 1 数组深拷贝的意义 JavaScript中的数组深拷贝,指的是创建一个完全独立于原始数组的新数组,所有新数组的元素都是原始数组的副本。…...
干翻Dubbo系列第七篇:@EnableDubbo、@DubboService、@DubboReference注解的作用
文章目录 文章说明 一:EnableDubbo注解的作用 1:注解使用地点 2:注解作用 3:路径要求 4:指定路径 5:另外一种指定路径 二:DubboService注解的作用 1:注解作用 2࿱…...
clickhouse断电重启故障解决方案
业务场景 公司的一个日志系统用到了clickhouse。一线运维反映说有个生产环境因为异常断电造成服务器重启。在执行日志系统的启动脚本时,一直报clickhouse启动不起来,日志系统无法使用。 问题排查 通过阅读启动脚本代码,以及启动日志系统&a…...
Spring学习笔记之Bean的实例化方式
文章目录 通过构造方法实例化通过简单工厂模式实例化通过factory-bean实例化BeanFactory和FactoryBean的区别BeanFactoryFactoryBean 注入自定义Date Spring为Bean提供了多种实例化方式,通常包括4种方式。(也就是说在Spring中为Bean对象的创建准备了很多…...
JVM-类加载器
1.前置知识 1.1CPU与内存交互图: 2.类加载器ClassLoader 在装载(Load)阶段,其中第(1)步:通过类的全限定名获取其定义的二进制字节流,需要借助类装 载器完成,顾名思义,就是用来装载Class文件的。 2.1什么是类加载器&a…...
【kafka】Golang实现分布式Masscan任务调度系统
要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收…...
CentOS下的分布式内存计算Spark环境部署
一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...
【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】
1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...
USB Over IP专用硬件的5个特点
USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中,从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备(如专用硬件设备),从而消除了直接物理连接的需要。USB over IP的…...
python报错No module named ‘tensorflow.keras‘
是由于不同版本的tensorflow下的keras所在的路径不同,结合所安装的tensorflow的目录结构修改from语句即可。 原语句: from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后: from tensorflow.python.keras.lay…...
return this;返回的是谁
一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请,不同级别的经理有不同的审批权限: // 抽象处理者:审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...
算法:模拟
1.替换所有的问号 1576. 替换所有的问号 - 力扣(LeetCode) 遍历字符串:通过外层循环逐一检查每个字符。遇到 ? 时处理: 内层循环遍历小写字母(a 到 z)。对每个字母检查是否满足: 与…...
Razor编程中@Html的方法使用大全
文章目录 1. 基础HTML辅助方法1.1 Html.ActionLink()1.2 Html.RouteLink()1.3 Html.Display() / Html.DisplayFor()1.4 Html.Editor() / Html.EditorFor()1.5 Html.Label() / Html.LabelFor()1.6 Html.TextBox() / Html.TextBoxFor() 2. 表单相关辅助方法2.1 Html.BeginForm() …...
宇树科技,改名了!
提到国内具身智能和机器人领域的代表企业,那宇树科技(Unitree)必须名列其榜。 最近,宇树科技的一项新变动消息在业界引发了不少关注和讨论,即: 宇树向其合作伙伴发布了一封公司名称变更函称,因…...
