Junit5 入门系列
文章平均质量分 84
Junit5 是下一代测试框架,完善了 Junit4 中的诸多不足。
老马啸西风
Github: https://github.com/houbb
Email:houbinbin.echo@gmail.com
展开
-
没啥用的黑科技——自动生成测试对象信息框架
创作目的我们平时在写测试用例的时候,免不了要写一大堆 set 方法为对象设置属性。有时候为了补全测试用例,这件事就会变得非常枯燥。于是就在想,能不能写一个可以自动生成测试对象的工具呢?于是就有了这一个没啥用的测试框架:https://github.com/houbb/data-factory项目简介data-factory 项目用于根据对象,随机自动生成初始化信息。便于测试。特性8 大基本类型的支持数组、对象、枚举、Map、链表、Set 等支持String、BigDe原创 2021-08-02 19:44:11 · 1646 阅读 · 0 评论 -
一个提升英文单词拼写检测性能 1000 倍的算法?
序言小明同学上一次在产品经理的忽悠下,写好了一个中英文拼写纠正工具:https://github.com/houbb/word-checker。本来以为可以一劳永逸了,直到昨天闲来无事,发现了另一个开源项目,描述简要如下:Spelling correction & Fuzzy search: 1 million times faster through Symmetric Delete spelling correction algorithmThe Symmetric Delete sp原创 2021-07-25 12:04:10 · 765 阅读 · 8 评论 -
基于 junit5 实现 junitperf 源码分析
前言上一节介绍了基于 junit4 实现 junitperf,但是可以发现定义变量的方式依然不够优雅。那可以让用户使用起来更加自然一些吗?有的,junit5 为我们带来了更加强大的功能。拓展阅读:浅谈性能测试基于 junit4 分析 junitperf 源码,junit4 99% 的人都不知道的秘密!没有对比,就没有伤害我们首先回顾一下 junit4 的写法:public class HelloWorldTest { @Rule public JunitPerfRule原创 2021-07-24 11:15:18 · 346 阅读 · 0 评论 -
关于 junit4 90% 的人都不知道的特性,详解 junitperf 的实现原理
前言上一节介绍了 https://github.com/houbb/junitperf 的入门使用。这一节我们从源码的角度,剖析一下其实现方式。性能测试该怎么做?Junit Rulesjunit4 小伙伴们肯定不陌生,那么 junit rules 你听过说过吗?要想基于 junit4 实现一个性能测试框架,最核心的一点在于理解 Junit Rules。官方文档:https://github.com/junit-team/junit4/wiki/RulesRules 作用规则允许非常灵原创 2021-07-24 10:38:21 · 435 阅读 · 0 评论 -
性能测试到底该怎么做?
三高人群作为一名开发者,我们最长听到的就是编程界的三高:高性能、高并发、高可用。听起来非常高大上,但是性能到底如何呢?又该如何评定呢?这次我们谈一谈性能测试,看一看到底什么样才叫做高性能。本文主要从以下几个方面进行讨论。(1)性能测试是什么?(2)为什么需要性能测试?(3)性能测试如何做?(4)有哪些性能测试的工具性能测试是什么?老马曾经说过,你想理解一件事物,首先必须先定义它。这里直接引用一下百科中的定义:性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统原创 2021-07-23 19:18:48 · 4637 阅读 · 11 评论 -
junit5 入门系列教程-30-junit5 实战例子 junit performance
目录目录实战项目junitperfjunit5 的新特性注解定义使用代码地址系列导航实战项目本系列的学习也正是为了将原来的项目,从 junit4 升级到 junit5junitperf Java 性能测试框架工具-JunitPerfjunit5 的新特性注解定义ps: 为了简化说明,删除了其他的属性。imp...原创 2018-07-02 11:35:32 · 38023 阅读 · 1 评论 -
junit5 入门系列教程-14-junit5 重复测试(@RepeatedTest)
目录目录重复测试特性说明测试案例实例系列导航重复测试JUnit Jupiter提供了通过使用@RepeatedTest注释方法并指定所需重复次数的能力。重复测试的每次调用都表现为对相同生命周期回调和扩展的完全支持的常规@Test方法的执行。下面的示例演示如何声明一个名为repeatedTest()的测试,它将自动重复10次。@RepeatedTest...原创 2018-06-27 08:43:44 · 40765 阅读 · 0 评论 -
junit5 入门系列教程-21-junit5 拓展实体测试实例后处理(Instance Post-processing)
目录目录测试实例后处理示例系列导航测试实例后处理TestInstancePostProcessor 为希望发布流程测试实例的扩展定义了API。常见的用例包括向测试实例注入依赖项、在测试实例上调用自定义初始化方法等。示例 MockitoExtension SpringExtension系列导航 系列导航...原创 2018-06-27 09:10:43 · 36584 阅读 · 0 评论 -
junit5 入门系列教程-29-junit5 拓展实体-Junit 平台启动器API(JUnit Platform Launcher API)
目录目录JUnit Platform Launcher API发现测试类执行测试类系列导航JUnit Platform Launcher APIJUnit 5最突出的目标之一是使JUnit与其编程客户端(构建工具和ide)之间的接口更加强大和稳定。 目的是将发现和执行测试的内部内容与所有必需的外部过滤和配置分离开来。JUnit 5引入了启动器的概念,可以...原创 2018-06-28 08:29:05 · 40591 阅读 · 0 评论 -
junit5 入门系列教程-28-junit5 拓展实体-测试生命周期回调
目录目录测试生命周期回调接口开始和结束的回调系列导航测试生命周期回调接口下面的接口定义了在测试执行生命周期的各个点上扩展测试的api。请参阅下面的小节,了解示例和Javadoc中的每个接口参见 org.junit.jupiter.api.extension实现多个扩展api扩展开发人员可以选择在一个扩展中实现任意数量的这些接口。有关...原创 2018-06-28 08:18:34 · 36554 阅读 · 0 评论 -
junit5 入门系列教程-12-junit5 依赖注入构造器、方法
目录目录依赖注入TestInfoParameterResolverRepetitionInfoParameterResolverTestReporterParameterResolver@ExtendWithRandomParametersExtension其他系列导航依赖注入在所有以前的JUnit版本中,都不允许测试构造函数或方法具有参数(至少不...原创 2018-06-27 08:37:39 · 39451 阅读 · 0 评论 -
junit5 入门系列教程-13-junit5 测试接口及默认方法
目录目录测试接口和默认方法定义接口测试案例接口契约接口定义测试类系列导航测试接口和默认方法JUnit Jupiter允许在接口默认方法上声明@Test、@RepeatedTest、@ParameterizedTest、@TestFactory、@TestTemplate、@BeforeEach和@AfterEach。 如果测试接口或测试类被@Tes...原创 2018-06-27 08:41:09 · 41169 阅读 · 0 评论 -
junit5 入门系列教程-14-junit5 参数化测试(@ParameterizedTest)
目录目录参数化测试实例需要使用参数源的参数(Sources of Arguments)@ValueSource实例@EnumSource@MethodSource自动搜索原始类型的流多个参数外部的静态工厂方法@CsvSource@CsvFileSource@ArgumentsSource参数转换扩大转换(Widening Conversi...原创 2018-06-27 08:45:49 · 60671 阅读 · 6 评论 -
junit5 入门系列教程-16-junit5 测试模板(@TestTemplate)
目录目录测试模板实例系列导航测试模板@TestTemplate方法不是常规的测试用例,而是测试用例的模板。因此,根据注册提供程序返回的调用上下文的数量,将多次调用它。因此,它必须与注册的 TestTemplateInvocationContextProvider 扩展一起使用。 测试模板方法的每次调用都表现为对相同生命周期回调和扩展的完全支持的常规@T...原创 2018-06-27 08:48:15 · 38774 阅读 · 1 评论 -
junit5 入门系列教程-17-junit5 动态测试(DynamicTest)
目录目录动态测试生命周期测试案例系列导航动态测试在标注中描述的JUnit Jupiter中的标准@Test注释与JUnit 4中的@Test注释非常相似。两者都描述了实现测试用例的方法。这些测试用例是静态的,因为它们是在编译时完全指定的,并且它们的行为不能被运行时发生的任何事情所改变。假设提供了一种基本的动态行为形式,但在其表达性上却被故意限制。除了这些标...原创 2018-06-27 08:49:50 · 40126 阅读 · 0 评论 -
junit5 入门系列教程-18-junit5 拓展模块总览(Extend Model)
目录目录拓展模型系列导航拓展模型与JUnit 4对比,Runner、@Rule和@ClassRule扩展点不同, JUnit Jupiter扩展模型由一个统一的概念组成:扩展(Extension) API。 但是请注意,这个扩展本身只是一个标记接口。系列导航 系列导航...原创 2018-06-27 09:04:05 · 36821 阅读 · 0 评论 -
junit5 入门系列教程-19-junit5拓展实体注册(Register Extension)
目录目录注册拓展声明扩展注册扩展登记顺序编程扩展注册静态字段实例化字段(Instance Fields)自动扩展注册开启自动扩展注册扩展继承系列导航注册拓展可以通过@ExtendWith以声明方式注册,可以通过@RegisterExtension以编程方式注册,也可以通过Java的ServiceLoader机制自动注册。声明扩展注册...原创 2018-06-27 09:06:10 · 37675 阅读 · 1 评论 -
junit5 入门系列教程-20-junit5 拓展实体条件测试
目录目录条件测试去活化条件(Deactivating Conditions)正则匹配语法系列导航条件测试ExecutionCondition 定义用于编程、条件测试执行的扩展API。执行条件对每个容器(例如,测试类)进行评估,以确定它包含的所有测试是否应该基于提供的ExtensionContext执行。 类似地,对每个测试执行条件进行评估,以确定是否...原创 2018-06-27 09:07:32 · 36665 阅读 · 0 评论 -
junit5 入门系列教程-22-junit5 拓展实体-参数化测试解决方案(Parameter Resolution)
目录目录ParameterResolver注意系列导航ParameterResolverParameterResolver 定义用于在运行时动态解析参数的扩展API。如果测试构造函数或@Test、@RepeatedTest、@ParameterizedTest、@TestFactory、@BeforeEach、@BeforeAll或@AfterAll方法接受...原创 2018-06-28 08:17:03 · 40032 阅读 · 0 评论 -
junit5 入门系列教程-23-junit5 拓展实体-异常处理器(Exception Handle)
目录目录TestExecutionExceptionHandler实例系列导航TestExecutionExceptionHandlerTestExecutionExceptionHandler 为希望处理测试执行期间抛出的异常的扩展定义了API。下面的示例显示了一个扩展,该扩展将包含IOException的所有实例,但将重新抛出任何其他类型的异常。...原创 2018-06-28 08:19:59 · 37022 阅读 · 0 评论 -
[junit5 入门系列教程-24-junit5 拓展实体-测试上下文(Test Context)
目录目录测试上下文实例系列导航测试上下文@TestTemplate方法只能在注册至少一个TestTemplateInvocationContextProvider时执行。每个这样的提供者都负责提供TestTemplateInvocationContext实例流。每个上下文可以指定一个自定义显示名称和一个附加扩展列表,这些扩展只用于@TestTemplat...原创 2018-06-28 08:21:10 · 37489 阅读 · 0 评论 -
junit5 入门系列教程-25-junit5 拓展实体-存储状态(Keeping State in Extensions)
目录目录在 Extensions 中保存状态使用带有方法级范围的存储ExtensionContext.Store.CloseableResource系列导航在 Extensions 中保存状态通常,一个扩展只实例化一次。 因此,问题变得相关了:如何将状态从一个扩展调用保存到下一个扩展?ExtensionContext API为此目的提供了一个存储。 扩展可...原创 2018-06-28 08:23:17 · 36481 阅读 · 0 评论 -
junit5 入门系列教程-26-junit5 拓展实体-工具类
目录目录拓展中支持的工具类注解支持类支持反射支持系列导航拓展中支持的工具类junit-platform-commons 构件公开了一个名为 org.junit.platform.commonsupport 的包, 该包包含维护的实用方法,用于处理注释、类、反射和类路径扫描任务。我们鼓励 TestEngine 和扩展作者使用这些受支持的方法,以便与JUn...原创 2018-06-28 08:24:29 · 36624 阅读 · 0 评论 -
junit5 入门系列教程-27-junit5 拓展实体-用户代码和扩展的相对执行顺序
目录目录用户代码和扩展的相对执行顺序相对顺序步骤系列导航用户代码和扩展的相对执行顺序当执行包含一个或多个测试方法的测试类时,除了用户提供的测试和生命周期方法外,还会调用许多扩展回调。相对顺序下图说明了用户提供的代码和扩展代码的相对顺序。BeforeAllCallBack //(1) @BeforeAll //(2) ...原创 2018-06-28 08:25:36 · 36751 阅读 · 0 评论 -
junit5 入门系列教程-11-junit5 内嵌测试(Nested Tests)
目录目录嵌套测试实例说明系列导航嵌套测试嵌套测试使测试编写者有更多的能力来表达几组测试之间的关系。这是一个精心设计的例子。实例TestingAStackDemo.java堆栈测试例子import static org.junit.jupiter.api.Assertions.assertEquals;import static o...原创 2018-06-26 11:11:20 · 39848 阅读 · 0 评论 -
junit5 入门系列教程-10-junit5 测试实例生命周期
目录目录测试实例生命周期修改默认的生命周期系列导航测试实例生命周期为了让单独的测试方法在隔离中执行,并且为了避免由于可变测试实例状态而产生的意外副作用, JUnit在执行每个测试方法之前创建了一个新的测试类的实例。 这种“每个方法”的测试实例生命周期是JUnit Jupiter中的默认行为,类似于JUnit的所有以前版本。如果您希望JUnit Jupite...原创 2018-06-26 11:10:12 · 37626 阅读 · 0 评论 -
junit5 入门系列教程-09-junit5 标签和过滤(@Tag)
目录目录标签和过滤语法规则实例系列导航标签和过滤可以通过 @Tag 注释对测试类和方法进行标记。这些标记稍后可用于筛选测试发现和执行。语法规则标签不能为空或 null。trim() 的标记不能包含空格。trim() 的标签不能包含ISO控制字符。trim()的标记不能包含以下任何保留字符:,: 逗号(: 左括号): 右括号&...原创 2018-06-26 11:09:03 · 38466 阅读 · 0 评论 -
junit5 入门系列教程-08-junit5 条件执行
目录目录按条件执行测试用例Composed Annotations操作系统条件Java 运行环境条件系统属性条件环境变量条件脚本依赖条件注意代码脚本绑定系列导航按条件执行测试用例JUnit Jupiter中的ExecutionCondition扩展API允许开发人员以编程方式启用或禁用容器或测试。 这种情况最简单的例子是内置的DisabledC...原创 2018-06-26 11:07:45 · 38290 阅读 · 0 评论 -
junit5 入门系列教程-07-junit5 禁用(Disabled)
目录目录@Disabled实例整个类单个方法系列导航@Disabled可以通过 @Disabled 注释、条件测试执行中讨论的注释之一 或自定义ExecutionCondition来禁用整个测试类或单个测试方法。实例整个类整个类中的测试方法,都会被跳过DisabledClassDemo.javaimport org.ju...原创 2018-06-26 11:03:27 · 37926 阅读 · 0 评论 -
junit5 入门系列教程-06-junit5 假设(Assumptions)
目录目录假设实例系列导航假设JUnit Jupiter附带了JUnit 4提供的假设方法的一个子集,并添加了一些可以很好地用于Java 8 lambdas的假设方法。所有的JUnit Jupiter假设都是在 org.junit.jupiter.api.Assumptions 的静态方法。实例AssumptionsDemo.javapack...原创 2018-06-26 11:02:17 · 37496 阅读 · 0 评论 -
junit5 入门系列教程-05-junit5 断言(assert)
目录目录Assert实例三方 jar系列导航AssertJUnit Jupiter附带了许多JUnit 4拥有的断言方法,并添加了一些可以很好地用于Java 8 lambdas的断言方法。 所有JUnit木星断言都是 org.junit.jupiter.api.Assertions 中的静态方法断言类。实例AssertTest.javai...原创 2018-06-26 11:01:01 · 51634 阅读 · 0 评论 -
junit5 入门系列教程-04-junit5 展现名称(DisplayName)
目录目录测试方法的名字说明例子系列导航测试方法的名字以前在看 Spock 的时候,提到一个胜于 Junit4 的优势就是可以灵活的定义测试方法和类的名称。说明Junit5 中的 @DisplayName 就为我们提供了实现这种方式的名称。测试类和测试方法可以声明自定义显示名称——带有空格、特殊字符甚至表情符号——将由测试运行器和测试报告显示。...原创 2018-06-26 10:59:43 · 40272 阅读 · 0 评论 -
junit5 入门系列教程-03-junit5 测试类和方法
目录目录测试类和方法标准案例系列导航测试类和方法测试方法是使用@Test、@RepeatedTest、@ParameterizedTest、@TestFactory或@TestTemplate直接或元注释的任何实例方法。测试类是包含至少一个测试方法的任何顶层或静态成员类。标准案例 注意测试类和测试方法都可以不设置为 public。...原创 2018-06-26 10:57:06 · 39147 阅读 · 0 评论 -
junit5 入门系列教程-02-junit5 注解详解
目录目录Junit5 注解@Test@ParameterizedTest@RepeatedTest@TestFactory@TestInstance@TestTemplate@DisplayName@BeforeEach@AfterEach@BeforeAll@AfterAll@Nested@Tag@Disabled@ExtendWith元注释,注释...原创 2018-06-26 10:54:55 · 41623 阅读 · 3 评论 -
junit5 入门系列教程-01-junit5 简单入门例子
目录目录Junit5简介JDK 支持快速开始Maven 导入测试案例变化文档参考Junit5JUnit5 is the next generation of JUnit. 目标是为JVM上的开发人员端测试创建一个最新的基础。这包括关注Java 8和以上版本,以及支持多种不同的测试风格。JUnit 5是JUnit Lambda和它在Indie...原创 2018-06-24 16:36:15 · 53569 阅读 · 5 评论