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

个人网站课程设计报告哪家建设公司宣传搞得好

个人网站课程设计报告,哪家建设公司宣传搞得好,wordpress 统计插件,信宜手机网站建设公司一、背景 什么是 JUnit 5#xff1f;首先就得聊下 Java 单元测试框架 JUnit#xff0c;它与另一个框架 TestNG 占据了 Java领域里单元测试框架的主要市场#xff0c;其中 JUnit 有着较长的发展历史和不断演进的丰富功能#xff0c;备受大多数 Java 开发者的青睐。 而说到… 一、背景 什么是 JUnit 5首先就得聊下 Java 单元测试框架 JUnit它与另一个框架 TestNG 占据了 Java领域里单元测试框架的主要市场其中 JUnit 有着较长的发展历史和不断演进的丰富功能备受大多数 Java 开发者的青睐。 而说到 JUnit 的历史JUnit 起源于 1997年最初版本是由两位编程大师 Kent Beck 和 Erich Gamma 的一次飞机之旅上完成的由于当时 Java 测试过程中缺乏成熟的工具两人在飞机上就合作设计实现了 JUnit 雏形旨在成为更好用的 Java 测试框架。 如今二十多年过去了JUnit 经过各个版本迭代演进已经发展到了 5.x 版本为 JDK 8以及更高的版本上提供更好的支持 (如支持 Lambda ) 和更丰富的测试形式 (如重复测试参数化测试)。 了解过 JUint 之后再回头来看下 JUnit 5这个版本可以说是 JUnit 单元测试框架的一次重大升级首先需要 Java 8 以上的运行环境虽然在旧版本 JDK 也能编译运行但要完全使用 JUnit 5 功能 JDK 8 环境是必不可少的。 除此之外JUnit 5 与以前版本的 JUnit 不同拆分成由三个不同子项目的几个不同模块组成。 JUnit 5 JUnit Platform JUnit Jupiter JUnit Vintage JUnit Platform 用于JVM上启动测试框架的基础服务提供命令行IDE和构建工具等方式执行测试的支持。 JUnit Jupiter包含 JUnit 5 新的编程模型和扩展模型主要就是用于编写测试代码和扩展代码。 JUnit Vintage用于在JUnit 5 中兼容运行 JUnit3.x 和 JUnit4.x 的测试用例。 为什么需要 JUnit 5 说完 JUnit 5 是什么之后我们再来想一个问题为什么需要一个 JUnit 5 呢 自从有了类似 JUnit 之类的测试框架Java 单元测试领域逐渐成熟开发人员对单元测试框架也有了更高的要求更多的测试方式更少的其他库的依赖。 因此大家期待着一个更强大的测试框架诞生JUnit 作为Java测试领域的领头羊推出了 JUnit 5 这个版本主要特性 提供全新的断言和测试注解支持测试类内嵌 更丰富的测试方式支持动态测试重复测试参数化测试等 实现了模块化让测试执行和测试发现等不同模块解耦减少依赖 提供对 Java 8 的支持如 Lambda 表达式Sream API等。 JUnit 5 常见用法介绍 接下来我们看下 JUni 5 的一些常见用法来帮助我们快速掌握 JUnit 5 的使用。 首先在 Maven 工程里引入 JUnit 5 的依赖坐标需注意的是当前JDK 环境要在 Java 8 以上。 dependencygroupIdorg.junit.jupiter/groupIdartifactIdjunit-jupiter-engine/artifactIdversion5.5.2/versionscopetest/scope /dependency dependencyManagementdependenciesdependencygroupIdorg.junit.jupiter/groupIdartifactIdjunit-jupiter-api/artifactIdversion${junit-jupiter.version}/version/dependencydependencygroupIdorg.junit.jupiter/groupIdartifactIdjunit-jupiter-engine/artifactIdversion${junit-jupiter.version}/version/dependency/dependencies/dependencyManagement 第一个测试用例 引入JUnit 5我们可以先快速编写一个简单的测试用例从这个测试用例来认识初步下 JUnit 5 DisplayName(我的第一个测试用例) public class MyFirstTestCaseTest {BeforeAllpublic static void init() {System.out.println(初始化数据);}AfterAllpublic static void cleanup() {System.out.println(清理数据);}BeforeEachpublic void tearup() {System.out.println(当前测试方法开始);}AfterEachpublic void tearDown() {System.out.println(当前测试方法结束);}DisplayName(我的第一个测试)Testvoid testFirstTest() {System.out.println(我的第一个测试开始测试);}DisplayName(我的第二个测试)Testvoid testSecondTest() {System.out.println(我的第二个测试开始测试);} } 直接运行这个测试用例可以看到控制台日志如下 可以看到左边一栏的结果里显示测试项名称就是我们在测试类和方法上使用 DisplayName 设置的名称这个注解就是 JUnit 5 引入用来定义一个测试类并指定用例在测试报告中的展示名称这个注解可以使用在类上和方法上在类上使用它就表示该类为测试类在方法上使用则表示该方法为测试方法。 Target({ ElementType.TYPE, ElementType.METHOD }) Retention(RetentionPolicy.RUNTIME) Documented API(status STABLE, since 5.0) public interface DisplayName {String value(); }再来看下示例代码中使用到的一对注解 **BeforeAll **和 AfterAll 它们定义了整个测试类在开始前以及结束时的操作只能修饰静态方法主要用于在测试过程中所需要的全局数据和外部资源的初始化和清理。与它们不同BeforeEach 和 AfterEach 所标注的方法会在每个测试用例方法开始前和结束时执行主要是负责该测试用例所需要的运行环境的准备和销毁。 在测试过程中除了这些基本的注解还有更多丰富强大的注解接下来就我们一一学习下吧。 禁用执行测试Disabled 当我们希望在运行测试类时跳过某个测试方法正常运行其他测试用例时我们就可以用上 Disabled 注解表明该测试方法处于不可用执行测试类的测试方法时不会被 JUnit 执行。 下面看下使用 Disbaled 之后的运行效果在原来测试类中添加如下代码 DisplayName(我的第三个测试) Disabled Testvoid testThirdTest() {System.out.println(我的第三个测试开始测试);} 运行后看到控制台日志如下用 Disabled 标记的方法不会执行只有单独的方法信息打印 Disabled 也可以使用在类上用于标记类下所有的测试方法不被执行一般使用对多个测试类组合测试的时候。 内嵌测试类Nested 当我们编写的类和代码逐渐增多随之而来的需要测试的对应测试类也会越来越多。为了解决测试类数量爆炸的问题JUnit 5提供了Nested 注解能够以静态内部成员类的形式对测试用例类进行逻辑分组。 并且每个静态内部类都可以有自己的生命周期方法 这些方法将按从外到内层次顺序执行。 此外嵌套的类也可以用DisplayName 标记这样我们就可以使用正确的测试名称。下面看下简单的用法 DisplayName(内嵌测试类) public class NestUnitTest {BeforeEachvoid init() {System.out.println(测试方法执行前准备);}NestedDisplayName(第一个内嵌测试类)class FirstNestTest {Testvoid test() {System.out.println(第一个内嵌测试类执行测试);}}NestedDisplayName(第二个内嵌测试类)class SecondNestTest {Testvoid test() {System.out.println(第二个内嵌测试类执行测试);}} } 运行所有测试用例后在控制台能看到如下结果 重复性测试RepeatedTest 在 JUnit 5 里新增了对测试方法设置运行次数的支持允许让测试方法进行重复运行。当要运行一个测试方法 N次时可以使用 RepeatedTest 标记它如下面的代码所示 DisplayName(重复测试) RepeatedTest(value 3) public void i_am_a_repeated_test() {System.out.println(执行测试); } 运行后测试方法会执行3次在 IDEA 的运行效果如下图所示 这是基本的用法我们还可以对重复运行的测试方法名称进行修改利用 RepeatedTest 提供的内置变量以占位符方式在其 name 属性上使用下面先看下使用方式和效果 RepeatedTest 注解内用 currentRepetition 变量表示已经重复的次数totalRepetitions 变量表示总共要重复的次数displayName 变量表示测试方法显示名称我们直接就可以使用这些内置的变量来重新定义测试方法重复运行时的名称。 新的断言 在断言 API 设计上JUnit 5 进行显著地改进并且充分利用 Java 8 的新特性特别是 Lambda 表达式最终提供了新的断言类: org.junit.jupiter.api.Assertions 。许多断言方法接受 Lambda 表达式参数在断言消息使用 Lambda 表达式的一个优点就是它是延迟计算的如果消息构造开销很大这样做一定程度上可以节省时间和资源。 现在还可以将一个方法内的多个断言进行分组使用 assertAll 方法如下示例代码 Test void testGroupAssertions() {int[] numbers {0, 1, 2, 3, 4};Assertions.assertAll(numbers,() - Assertions.assertEquals(numbers[1], 1),() - Assertions.assertEquals(numbers[3], 3),() - Assertions.assertEquals(numbers[4], 4)); }如果分组断言中任一个断言的失败都会将以 MultipleFailuresError 错误进行抛出提示。 超时操作的测试assertTimeoutPreemptively 当我们希望测试耗时方法的执行时间并不想让测试方法无限地等待时就可以对测试方法进行超时测试JUnit 5 对此推出了断言方法 assertTimeout提供了对超时的广泛支持。 假设我们希望测试代码在一秒内执行完毕可以写如下测试用例 Test DisplayName(超时方法测试) void test_should_complete_in_one_second() {Assertions.assertTimeoutPreemptively(Duration.of(1, ChronoUnit.SECONDS), () - Thread.sleep(2000)); }这个测试运行失败因为代码执行将休眠两秒钟而我们期望测试用例在一秒钟之内成功。但是如果我们把休眠时间设置一秒钟测试仍然会出现偶尔失败的情况这是因为测试方法执行过程中除了目标代码还有额外的代码和指令执行会耗时所以在超时限制上无法做到对时间参数的完全精确匹配。 异常测试assertThrows 我们代码中对于带有异常的方法通常都是使用 try-catch 方式捕获处理针对测试这样带有异常抛出的代码而 JUnit 5 提供方法 Assertions#assertThrows(ClassT, Executable) 来进行测试第一个参数为异常类型第二个为函数式接口参数跟 Runnable 接口相似不需要参数也没有返回并且支持 Lambda表达式方式使用具体使用方式可参考下方代码 Test DisplayName(测试捕获的异常) void assertThrowsException() {String str null;Assertions.assertThrows(IllegalArgumentException.class, () - {Integer.valueOf(str);}); }当Lambda表达式中代码出现的异常会跟首个参数的异常类型进行比较如果不属于同一类异常就会控制台输出如下类似的提示org.opentest4j.AssertionFailedError: Unexpected exception type thrown expected: IllegalArgumentException but was: ...Exception JUnit 5 参数化测试 要使用 JUnit 5 进行参数化测试除了 junit-jupiter-engine 基础依赖之外还需要另个模块依赖junit-jupiter-params其主要就是提供了编写参数化测试 API。同样方式把相同版本的对应依赖引入 Maven 工程中 dependencygroupIdorg.junit.jupiter/groupIdartifactIdjunit-jupiter-params/artifactIdversion5.5.2/versionscopetest/scope /dependency 基本数据源测试 ValueSource ValueSource 是 JUnit 5 提供的最简单的数据参数源支持 Java 的八大基本类型和字符串Class使用时赋值给注解上对应类型属性以数组方式传递示例代码如下 public class ParameterizedUnitTest {ParameterizedTestValueSource(ints {2, 4, 8})void testNumberShouldBeEven(int num) {Assertions.assertEquals(0, num % 2);}ParameterizedTestValueSource(strings {Effective Java, Code Complete, Clean Code})void testPrintTitle(String title) {System.out.println(title);} }ParameterizedTest 作为参数化测试的必要注解替代了 Test 注解。任何一个参数化测试方法都需要标记上该注解。 运行测试结果如下图所示针对 ValueSource 里每个参数都会运行目标方法一旦哪个参数运行测试失败就意味着该测试方法不通过。 CSV 数据源测试CsvSource 通过 CsvSource 可以注入指定 CSV 格式 (comma-separated-values) 的一组数据用每个逗号分隔的值来匹配一个测试方法对应的参数下面是使用示例 ParameterizedTest CsvSource({1,One, 2,Two, 3,Three}) void testDataFromCsv(long id, String name) {System.out.printf(id: %d, name: %s, id, name); } 运行结果如图所示除了用逗号分隔参数外CsvSource 还支持自定义符号只要修改它的 delimiter 即可默认为 。 JUnit 还提供了读取外部 CSV 格式文件数据的方式作为数据源的实现我们只要用 CsvFileSource 指定资源文件路径即可使用起来跟 CsvSource 一样简单这里就不再重复演示了。 CsvFileSource 指定的资源文件路径时要以 / 开始寻找当前测试资源目录下文件。 除了上面提到的三种数据源方式外JUnit 还提供了以下三种数据源 EnumSource允许我们通过参数值给指定 Enum 枚举类型传入构造出枚举类型中特定的值。MethodSource指定一个返回的 Stream / Array / 可迭代对象 的方法作为数据源。 需要注意的是该方法必须是静态的并且不能接受任何参数。ArgumentSource通过实现 ArgumentsProvider 接口的参数类来作为数据源重写它的 provideArguments 方法可以返回自定义类型的 StreamArguments 作为测试方法所需要的数据使用。 对上面三种数据源注解感兴趣的同学可以参考示例工程的 ParameterizedUnitTest 类这里就不一一再介绍了。 结语 到这里想必你对 JUnit 5 也有了基本的了解和掌握都说单元测试是提升软件质量提升研发效率的必备环节从会用 JUnit 5 写单元测试开始培养写测试代码的习惯在不断实践中提升自身的开发效率让写出来的代码有更质量的保证。
http://wiki.neutronadmin.com/news/373350/

相关文章:

  • 网站上做旅游卖家要学什么条件网站代码如何导入
  • 门户网站建设合同健康养老网站建设
  • 简洁大气蓝色文章资讯网站营销推广网站推广方案
  • 用c语言怎么做网站网站团队人员
  • 做一手房开什么网站比较好呢wordpress副标题的作用
  • 域名注册以后怎样做网站中信建设四川分公司招聘
  • 企业网站趋势西安制作网站软件
  • 网站信息化建设总体情况wordpress tml
  • 网站建设需要什么人才合肥优化排名推广
  • 合肥响应式网站建设怎么看网站做没做优化
  • 专做国外旅游的网站wordpress服务器出错
  • 980网站北京互联网排名
  • 温州大型网站建设做视频的背景音乐哪里下载网站
  • 网站开发设计培训脚本语言在网站开发中
  • 杭州手机申请网站登录湖南省建设厅田明革简介
  • h5网站制作平台大连工业大学专升本
  • 珠海网站推广公司网页设计模板html代码运行
  • 大学招生网站建设免费海报制作
  • php怎么做网站教程现在怎么做网站
  • 网站加载很慢怎么办wordpress 扫码支付宝
  • 福州网站设计十年乐云seoh5页面制作用什么软件
  • 电商网站建设费用价格ps教程自学网免费
  • 深圳网站建设toolcat温州专业全网推广建站公司
  • 可以做课后作业的网站微商城分销
  • 做网站分几种怎么使用宝塔做网站
  • 网站对于企业的好处网站主机购买
  • 编程网站排名多网站管理
  • 天津建设部网站首页个人网站用什么开发
  • 业之峰装饰官网公司seo是什么意思
  • 怎么是一个网站看起来高大上关键词排名优化顾问