,如果有异常的话,@After后面的代码也会执行 三、配置文件 按理说只要能保存一些配置信息,供程序动态读取数据就OK,但是为了提高效率,在 IT 行业中,习惯使用两种具有特殊特点的文件来作为配置文件...:@注解名(属性名=属性值, 属性名=属性值) 注解贴在程序元素上,想要拥有某一些功能,必须有三个角色去参与: 注解本身 被贴的程序元素 第三方程序,使用反射给注解赋予功能(在注解的背后,一定有一段代码给注解赋予功能...6.3、内置注解 @Override 限定覆写父类方法 @Deprecated 标记已过时,不推荐使用.在JDK5之前,使用文档注释来标记过时 @SuppressWarings 抑制编译器发出的警告 @...ElementType.TYPE只能修饰类,接口,枚举。 6.4.2、@Retention 表示注解可以保存在哪一个时期,表示时期的值,封装在RetentionPolicy枚举类中。 ?...标记已过时,不推荐使用.在JDK5之前,使用文档注释来标记过时 @SuppressWarings 抑制编译器发出的警告 @Functionallnterface 标记该接口是一个函数接口(JDK1.8开始出现的
可以看到左边一栏的结果里显示测试项名称就是我们在测试类和方法上使用 @DisplayName 设置的名称,这个注解就是 JUnit 5 引入,用来定义一个测试类并指定用例在测试报告中的展示名称,这个注解可以使用在类上和方法上...,在类上使用它就表示该类为测试类,在方法上使用则表示该方法为测试方法。...@Disabled 也可以使用在类上,用于标记类下所有的测试方法不被执行,一般使用对多个测试类组合测试的时候。...此外,嵌套的类也可以用@DisplayName 标记,这样我们就可以使用正确的测试名称。...除了上面提到的三种数据源方式外,JUnit 还提供了以下三种数据源: @EnumSource:允许我们通过参数值,给指定 Enum 枚举类型传入,构造出枚举类型中特定的值。
@DisplayName 设置的名称,这个注解就是 JUnit 5 引入,用来定义一个测试类并指定用例在测试报告中的展示名称,这个注解可以使用在类上和方法上,在类上使用它就表示该类为测试类,在方法上使用则表示该方法为测试方法...] @Disabled 也可以使用在类上,用于标记类下所有的测试方法不被执行,一般使用对多个测试类组合测试的时候。...此外,嵌套的类也可以用@DisplayName 标记,这样我们就可以使用正确的测试名称。...除了上面提到的三种数据源方式外,JUnit 还提供了以下三种数据源: @EnumSource:允许我们通过参数值,给指定 Enum 枚举类型传入,构造出枚举类型中特定的值。...> ,作为测试方法所需要的数据使用。
源码,此时已经是稳定版了: 综上所述,如果要使用参数化测试,最好是将junit-jupiter升级到5.7.0或更高版本,如果您的应用使用了SpringBoot框架,junit-jupiter是被...,用法和执行结果如下图所示: 枚举数据源(EnumSource) EnumSource可以让一个枚举类中的全部或者部分值作为测试方法的入参; 创建枚举类Types.java,用于接下来的实战,如下...,很简单只有三个值: public enum Types { SMALL, BIG, UNKNOWN } 先尝试用Types的每个值作为入参执行测试,可见只要添加@EnumSource...即可,JUnit根据测试方法的入参类型知道要使用哪个枚举: @Order(6) @DisplayName("多个枚举型入参") @ParameterizedTest @EnumSource...enumSourceTest(Types type) { log.info("enumSourceTest [{}]", type); } 执行结果如下图所示: 如果不想执行枚举的所有值
2、测试类的生命周期 @Test Junit的最核心的就是@Test这个注解,把它放置在方法上来作为测试用例来运行。JUnit 5为每个测试方法创建一个新的测试实例,这个和Junit 4是一样的。...在测试用例和标记了@AfterEach的方法之后运行。 因为每个test都要创建一个实例,所以实例没机会去调用标记了@BeforeAll和@AfterAll的实例方法。...只需要简单的使用@Nested把内部类标记了,里边所有的测试方法就也会被执行。...2、Enum Source 传入枚举,则会对枚举的每个值执行一次,同时可以通过names来控制要执行哪些枚举值: @ParameterizedTest @EnumSource(TimeUnit.class...会解析成valueOf方法返回值)。 任何枚举。解析成Enum::valueOf。
存在诸多不足, 在类型安全性和使用方便性方面没有任何帮助.采用int枚举模式的程序是十分脆弱的, 因为int枚举是编译时常量, 被编译到使用它们的客户端中....返回每个枚举常量在类型中的数字位置.永远不要根据枚举的序数导出与它关联的值, 而是要将它保存在一个实例域中.第36条 用EnumSet代替位域如果一个枚举类型的元素主要用在集合中, 一般就用int枚举模式...如果API是根据接口编写的, 那么在可以使用基础枚举类型的任何地方, 也都可以使用这些枚举.第39条 注解优先于命名模式Java 1.5之前, 一般使用命名模式(naming pattern)表明有些程序元素需要通过某种工具或者框架进行特殊处理...比如JUnit3要求测试方法名以test开头....例如Serializable接口.标记接口和标记注解各有用处.
通过@EnumValue和@EnumValue注解,您可以指定枚举的值和数据库字段之间的映射关系。 枚举类型: 在MyBatis-Plus中,枚举类型可以用于作为实体类中的字段类型。...自动类型转换: 使用MyBatis-Plus,当将枚举对象插入数据库或从数据库中检索时,自动进行枚举对象与数据库字段值的转换。这意味着您无需手动执行转换操作。...枚举值转换: 通过在枚举类中定义对应的值,您可以确保枚举在数据库中的存储值与实际枚举值一致。这样,您可以保持代码的一致性和可读性。...常规用法: 在MyBatis-Plus中,枚举的使用方式类似于普通的字段类型。您可以在实体类的属性中使用枚举类型,然后在Mapper中执行数据库操作。...@EnumValue // 标记要映射的枚举类型 private PaymentStatus paymentStatus; // ... } 通过MyBatis-Plus的枚举支持,您可以更加方便地管理枚举类型与数据库字段之间的映射
,系统内部相关,配置)P 私密信息(Confidential Information) 不要把高度敏感的信息写到日志 私密信息(Confidential Information) 考虑把高度敏感的信息在使用后从内存中清除...通过序列化来保护敏感数据 序列化反序列化(Serialization Deserialization) 小心地缓存潜在的特权操作结果 序列化反序列化(Serialization Deserialization) 只有在需要的时候才使用...,而不是null 方法 最小化类和成员的可访问性 类和接口 在pulibc类中,使用访问器方法(accessor methods)(译者注:访问器方法即我们平常用的get/set方法)而不是public...总是重写toString 综合编程 使用枚举来代替int常量 枚举和注解(Annotations) 使用标记接口(marker interface)(译者注:标记接口是一种没有任何行为的接口,实现它只是为了让实现类属于某种类型...,如JDK中的Serializable,Cloneable等)来定义类型 枚举和注解(Annotations) 对共享可变的数据使用同步访问 并发 使用executors而不是task和thread 并发
可以使用 @Profile 标记,来指定何时被加载。...【容器中的组件都可以被 @Profile标记】2.1.2 环境激活配置激活指定环境; 配置文件spring.profiles.active=production,hsqldb也可以使用命令行激活。...配置优先级Spring Boot 允许将配置外部化,以便可以在不同的环境中使用相同的应用程序代码。...属性占位符配置文件中可以使用 ${name:default}形式取出之前配置过的值。...@CsvFileSource:表示读取指定CSV文件内容作为参数化测试入参@MethodSource:表示读取指定方法的返回值作为参数化测试入参(注意方法返回需要是一个流)@ParameterizedTest
依赖 JUnit5需要添加junit-jupiter-params依赖才能使用参数化: org.junit.jupiter...@EnumSource的默认值的类型必须是枚举类型。...names属性用来指定使用哪些特定的枚举值: @ParameterizedTest @EnumSource(names = { "DAYS", "HOURS" }) void testWithEnumSourceInclude...6 @CsvFileSource 顾名思义,选择本地csv文件作为数据来源。...另外还介绍了JUnit Jupiter的参数类型转换和参数聚合。最后,如果想要自定义参数化测试的名字,可以使用name属性实现。
实事上,Annotation已经被广泛用于各种Java框架,如Spring,Jersey,JUnit,TestNG。...、成员变量、枚举值)、方法参数和本地变量(如循环变量、catch参数)。...的枚举类型值 SOURCE:在源文件中有效(即源文件保留) CLASS:在class文件中有效(即class保留) RUNTIME:在运行时有效(即运行时保留) @Documented @Documented...@SuppressWarnnings不是标记型Annotation,它有一个类型为String[]的成员,这个成员的值为被禁止的警告名。常见的警告名为下。...方法后面可以使用default关键字和一个默认数值来声明成员的默认值,null不能作为成员默认值。
基本用法 编写一个类 + 声明一个无参无返回值方法 + 加上@Test注解 使用 JUnit 4 的方式比较简单,只需要编写一个类,并声明一个无入参、无返回值的方法,并标注 @Test 注解即可被 IDE...在 JUnit 4 中我们使用 Assert 类进行断言,而到了 JUnit 5 中使用的类是 Assertions ,类名变了,使用方式却大差不差,下面通过几个简单示例讲解 JUnit 5 的断言使用...2、基本使用 Assertions 提供的最简单的断言方法,包含比对两个值是否相等、两个对象是否是同一个、对象是否为 null ,以及全场景通用的判断表达式的值为 true / false 。...参数化测试支持我们使用如下的方式赋予参数: 基本类型:8 种基本数据类型 + String + Class ; 枚举类型:自定义的枚举; CSV 文件:可传入一个 CSV 格式的表格文件,使用表格文件中的数据作为入参...3、基本类型 概述 在使用参数化测试时,标注的注解不再是 @Test ,取而代之的是 @ParameterizedTest ;另外还需要声明需要传入的数据,对于简单的基本类型而言,使用 @ValueSource
此外,嵌套的类也可以用@DisplayName 标记,这样我们就可以使用正确的测试名称。...没有限制嵌套层数,除非必要一般不建议使用超过3层,过于复杂的层次结构会增加开发者理解用例关系的难度 构造函数和方法的依赖注入 在之前的所有JUnit版本中,测试构造函数或方法都不允许有参数(至少不能使用标准的...EnumSource: 表示为参数化测试提供一个枚举入参 @CsvSource:表示读取CSV格式内容作为参数化测试入参 @CsvFileSource:表示读取指定CSV文件内容作为参数化测试入参 @MethodSource...:表示读取指定方法的返回值作为参数化测试入参(注意方法返回需要是一个流) @ArgumentsSource:指定一个自定义的,可重用的ArgumentsProvider。...image-20210416233807174 如果不是基础的类型,可以使用方法构造,只要返回值为Stream类型就可以,多个参数使用Arguments实例流 @ParameterizedTest @MethodSource
JUnit的@Test就是告诉测试运行器哪些是测试方法。面试官:注解和注释有什么区别吧?...@Pointcut:定义一个切点,可以是一个规则表达式,和@Before等注解搭配使用。@Before:前置通知,在目标方法调用前执行。...这些AOP注解通过在方法上标记,就可以实现方法的切入、替换等,真正做到面向切面编程。面试官:自定义注解需要什么?...然后使用@interface自定义注解,可以添加属性,默认值等。面试官:注解的生命周期有几种?...如果注解有默认值,在使用注解时可以忽略该值。同一个地方不能同时存在两个同名注解。注解不能作用于变量、类的私有成员上。注解不会继承,子类或者实现类无法继承父类或者接口的注解。图片《面试1v1》合集---
注解的作用 对Java中类,方法,成员变量做标记,然后进行特殊处理,至于到底进行何种处理由具体业务决定。...比如说:JUnit框架中,标注了注解为@Test的方法就可以被当成测试方法执行,而没有标记的就不能打算当初当成测试方法执行。...特殊属性 value属性,如果只有一个value属性的情况下,使用value属性的时候可以省略value名称不写。 但是如果有多个属性,并且属性没有默认值,那么value名称不能省略。...常用的元注解 @Target: 约束自定义注解只能在哪些地方使用 @Retention:申明注解的生命周期 @Target中可使用的值定义在枚举类ElementType中,常用值如下: TYPE,类 接口...FIELD, 成员变量METHOD, 成员方法PARAMETER, 方法参数CONSTRUCTOR, 构造器LOCAL_VARIABLE 局部变量 @Retention中可使用的值定义在枚举类ElementType
(service) @Repository : 标记持久化层组件(DAO) @Controller、@Service、@Repository这三个注解只是在@Component注解的基础上起了三个新的名字...expression="org.springframework.stereotype.Controller"/> 注:bean的id属性 在我们使用...(都需要创建bean) 使用 @Autowired注解 实现自动装配 案例: - TestController 需要 TestService; - TestService 需要 TestDao; - 同时在各个组件中声明要调用的方法...注解 相当于XML文件中的bean标签,标记的方法的返回值会被放入 IOC 容器,默认以方法名作为 bean 的 id; 使用 AnnotationConfigApplicationContext...标签,标记的方法的返回值会被放入 IOC 容器,默认以方法名作为 bean 的 id @RunWith:指定Spring为Junit提供的运行器 @ContextConfiguration:
,在定义注解时需要使用关键字 @interface, 该关键字会默认继承 Annotation 接口,并将定义的接口作为注解使用 注解中可以定义方法,这些方法的返回值只能是基本类型、String、枚举类型...在使用注解时需要注意以下几个事情 必须给注解的属性赋值,如果不想赋值可以使用default来设置默认值 如果属性列表中只有一个名为value的属性,那么在赋值时可以不用指定属性名称 多个属性值之间使用逗号隔开...,该枚举类型可以取下列几个值 ElementType 含义 TYPE 接口、类(包括注解)、枚举类型上使用 FIELD 字段声明(包括枚举常量) METHOD 方法 PARAMETER 参数声明 CONSTRUCTOR...Junit框架 在软件开发中为了保证软件质量单元测试是必不可少的一个环节,Java中提供了Junit 测试框架来进行单元测试 一般一个Java项目每一个类都会对应一个test类用来做单元测试,例如有一个...:在测试方法被执行前会执行该注解修饰的方法 @After:在测试方法被执行后会执行该注解修饰的方法 除了注解JUnit定义了一些断言函数来实现自动化测试,常用的有如下几个: void assertEquals
此外,该平台还提供了一个控制台启动器,可以从命令行启动平台,并为Gradle 和 Maven 构建插件,以及一个基于JUnit 4的运行器(JUnit 4 based Runner),用于在平台上运行任何...**JUnit Jupiter:**是在JUnit 5中编写测试和扩展的新编程模型和扩展模型的组合。...**JUnit Vintage:**提供了一个在平台上运行JUnit 3和JUnit 4的 TestEngine 。...1.2、why Junit5 众所周知Java的测试框架比较有名是TestNG、Junit,今本次架构师课程我给大家讲解Junit5框架的基本使用和改造,为什么会现在Junit5也是有很多原因的,对于这...assertThat(map, hasValue("test2")); 2、Java注解和反射 上面我们介绍了Junit5的基本使用后,下面我们来看看注解和反射,为什么我们要学习注解和反射,这块在设计测试框架以及多框架功能扩展的时候我们就会用到注解和反射
参数校验: 使用java validtion对通用的字段,例如电话号码,身份证,进行扩展,详细可以参考,如何使用validation校验参数?,在项目中其他类似校验进行复用。...使用MapStruct,可以灵活的控制的不同属性值之间的转换规格,比org.springframework.beans.BeanUtils.copyProperties()方法更加灵活。...,在mybatis-plus中使用MetaObjectHandler,在执行sql之前完成统一字段值的填充。...枚举类的使用: 在业务中特别是状态的值,在对外发布api的vo对象中,加上状态枚举值的注释,并且使用@link 注解,可以直接连接到枚举类,让开发者一目了然。... // TODO 修改操作为涉及到的查询操作 // TODO 使用redis生成业务code // 使用声明式事务控制产品状态修改的相关数据库操作 boolean status
领取专属 10元无门槛券
手把手带您无忧上云