皮皮网
皮皮网
yfi源码

【源码安装uwsgi】【南京和太仓源码】【8公里源码】springtest源码教学

时间:2024-12-29 00:13:40 分类:探索 编辑:crossapp源码
1.单元测试实践
2.junit和spring-test啥关系
3.Spring Boot 教程 - Test
4.Spring注解驱动开发二狗子让我给他讲讲@EnableAspectJAutoProxy注解
5.Spring框架@PostConstruct注解详解
6.spring boot test 类配置redis 源码连接

springtest源码教学

单元测试实践

       非常有意思的一段话:

       我们用得最多的基本单元测试框架是junit和testng,下面对这两个工具做个对比。教学

       通过上面的源码对比可以看出,TestNG作为Java项目的教学单元测试框架是更有优势的,TestNG在参数化测试、源码依赖测试、教学源码安装uwsgi套件测试、源码分组测试、教学并发测试等方面都比Junit4强,源码同时,教学TestNG涵盖了JUnit4的源码全部功能。

       所以下面的教学案例说明都是基于TestNG来写的。

       为方便对后面内容的源码理解,先写一个单元测试:

       这是教学一个验证rsa加解密功能的单元测试。

       TestMain是源码抽象出来,用于启动spring容器以及支持testng用例自动注入bean,因为启动spring容器总是很耗时的,如果我们的测试用例用不到依赖的spring bean,最好不雅启动spring容器,TestMain源码:

       这就是TestMain最好放在和工程Application类所在包相同路径下的原因,比如我的示例中TestMain和BoardServerApplication都在相同包路径下:com.allawn.athletic.board.server。

       检查TestNG插件是否存在

       插件搜索“Coverage”

       在我们的pom文件下加如下plugin配置:

       idea插件自带,带搜索插件“PIT mutation testing”,但不建议用,很难调通!

       本地开发环境

       IDE自动创建单元测试的方法(也可手动完成):

       创建后的单元测试在Maven工程的test目录下生成测试类:

       注意:如果之前没有test目录,则需要手动创建一下:

       然后再把目录设置为test目录。设置方法:file -> Project Structure -> Modules

       运行单元测试

       创建单元测试

       Maven执行的相关命令:

       如果单元测试不通过,出现如下:

       两种方式皆可运行。南京和太仓源码

       运行不通过则则会有提示

       要通过maven运行单元测试,要保证pom配置没有跳过单元测试,检查设置如下:

       IDEA可以直接生成覆盖率报告,导出来的覆盖率报告长这样:

       点击index.html即可看报告内容:

       变异测试,英文Mutation Testing,是使用变异器 (切换数学运算符,更改返回类型,删除调用等)将代码修改为不同的变异(基于变异器创建新代码),并检查单元测试是否失败。好的单元测试应该使所有突变都失败(杀死)。

       主要列出testng的测试方法,junit的测试方法请另行百度。

       异常测试是指在单元测试中应该要抛出什么异常是合理的,可以检测我们方法中指定跑出的异常,类似这种:

       如果我们有时候不想测试某些方法的单元测试,那么我们可以指定这些具体的单元测试跳过不执行,testng和junit4都支持忽略测试,testng通过@Test(enabled=false)跳过。

       指定某个单元测试方法最长执行时间,如果超时了就算失败,testng中的timeout单位是毫秒。

       套件测试是指把多个单元测试组合成一个模块,然后一起运行,在套件定义中还可以通过定义组,针对相同组名的单元测试统一运行。

       为方便我们模拟单元测试的传参,testng提供了@DataProvider注解,我们可以在单元测试内设置多种参数值,8公里源码单元测试会依次把入参都跑一遍。被@DataProvider修饰的方法,返回值是数组形式。

       依赖测试是指测试的方法是有依赖的,在执行的测试之前需要执行的另一测试。如果依赖的测试出现错误,所有的子测试都被忽略,且不会被标记为失败。

       TestNG支持通过多个线程并发调用一个测试接口来实现性能测试,invocationCount表示方法调用的次数,threadPoolSize表示并发线程数量,timeOut即是每次调用最大耗时时间。

       通过多线程并行调用多个测试方法,在我们套件/组测试的时候,如果使用并行测试,可以大大减少测试运行时间。

       Mock的使用场景:

       Mockito有比较简洁的API,简单易学,可读性强。从Mockito2开始,Mockito支持了很多新特性以及新注解(所以依赖mockito2.x以上版本的需要java8及以上jdk方可),使用很便捷,spring-boot-starter-test包默认内置mockito,鉴于维护性和语言新特性的支持,个人建议使用Mockito作为单元测试的mock工具。

       在有需要的地方进行mock,否则走真实方法调用。

       除了采用静态方法spy以外,android重力球源码还可以通过采用注解的方式:

       结果示例:

       除了@Spy注解需要如此设置,@Mock、@Captor、@InjectMocks等注解也需要。

       对整个class进行mock

       结果:

       Junit5使用手册: junit.org/junit5/docs/c...

       在Junit5中要使用Mockito,需要单独引入mockito-junit-jupiter依赖包,通过在单元测试类上加

       @ExtendWith(MockitoExtension.class)

       实现构建一个mock运行容器。

       在有需要的地方进行mock,否则走真实方法调用。

       除了采用静态方法spy以外,还可以通过采用注解的方式:

       结果示例:

       结果:

junit和spring-test啥关系

       spring-test封装了junit,使得spring应用进行单元测试更加简单方便。

       slf4j和logback的关系跟上面的不一样,slf4j只是一个门面,可以接很多日志框架比如log4j logback等, 它本身不具有日志输出能力。

Spring Boot 教程 - Test

       在开发过程中,代码测试的重要性不言而喻。为了确保代码质量,Spring Boot 提供了集成化的Test框架——Spring Boot Test,它简化了与Spring Test的集成,并增强了Mock功能。主要的测试类别包括单元测试(如JUnit)和切片测试。以下是使用Spring Boot Test的基本步骤:

       首先,通过在项目中引入spring-boot-starter-test依赖,然后在测试类上使用@RunWith(SpringRunner.class)和@SpringBootTest注解,即可启用Spring Boot的测试环境。例如,对于StudentService的测试,我们创建StudentServiceTest.java文件,每个测试方法对应服务类的方法,如这样编写:

       java

       @RunWith(SpringRunner.class)

       @SpringBootTest

       public class StudentServiceTest {

        @Autowired

        private StudentService studentService;

        @Test

        public void testStudentServiceMethod() {

        // 测试代码

        }

       }

       每个测试方法都是独立运行的,它会自动加载Spring Test的测试环境,并使用项目配置和环境,仿京东新版源码方便开发者进行自我验证。

Spring注解驱动开发二狗子让我给他讲讲@EnableAspectJAutoProxy注解

       在配置类上添加@EnableAspectJAutoProxy注解,能够开启注解版的AOP功能。这意味着,如果在AOP中要启用注解版的AOP功能,就需要在配置类上添加@EnableAspectJAutoProxy注解。让我们来看看@EnableAspectJAutoProxy注解的源码,如下所示。

       从源码可以看出,@EnableAspectJAutoProxy注解使用@Import注解引入了AspectJAutoProxyRegister.class对象。那么,AspectJAutoProxyRegistrar是做什么的呢?我们点击到AspectJAutoProxyRegistrar类的源码中,如下所示。

       可以看到AspectJAutoProxyRegistrar类实现了ImportBeanDefinitionRegistrar接口。我们回顾ImportBeanDefinitionRegistrar接口的定义,如下所示。

       通过ImportBeanDefinitionRegistrar接口,我们可以实现将自定义的组件添加到IOC容器中。也就是说,@EnableAspectJAutoProxy注解使用AspectJAutoProxyRegistrar对象自定义组件,并将相应的组件添加到IOC容器中。

       在AspectJAutoProxyRegistrar类的registerBeanDefinitions()方法中设置断点,我们以debug的方法来运行AopTest类的testAop()方法。当程序运行到断点位置时,我们可以看到程序已经暂停,IDEA的左下角显示了方法的调用栈。

       在registerBeanDefinitions()方法中,首先调用AopConfigUtils类的registerAspectJAnnotationAutoProxyCreatorIfNecessary()方法来注册registry。在registerAspectJAnnotationAutoProxyCreatorIfNecessary()方法中,直接调用了重载的registerAspectJAnnotationAutoProxyCreatorIfNecessary()方法。在重载的registerAspectJAnnotationAutoProxyCreatorIfNecessary()方法中,传入了AnnotationAwareAspectJAutoProxyCreator.class对象。

       在registerOrEscalateApcAsRequired()方法中,接收到的Class对象的类型为:org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator。然后,我们继续跟进代码。

       在registerOrEscalateApcAsRequired()方法中,首先判断registry是否包含org.springframework.aop.config.internalAutoProxyCreator类型的bean。接下来,我们继续看代码。

       最终,AopConfigUtils类的registerOrEscalateApcAsRequired()方法中,会通过registry调用registerBeanDefinition()方法注册组件,并注册的bean的名称为org.springframework.aop.config.internalAutoProxyCreator。

       接下来,我们继续看AspectJAutoProxyRegistrar类的registerBeanDefinitions()源码。我们通过AnnotationConfigUtils类的attributesFor方法来获取@EnableAspectJAutoProxy注解的信息。接下来,我们继续判断proxyTargetClass属性的值是否为true,如果为true则调用AopConfigUtils类的forceAutoProxyCreatorToUseClassProxying()方法;继续判断exposeProxy属性的值是否为true,如果为true则调用AopConfigUtils类的forceAutoProxyCreatorToExposeProxy()方法。

       综上所述,向Spring的配置类上添加@EnableAspectJAutoProxy注解后,会向IOC容器中注册AnnotationAwareAspectJAutoProxyCreator。

       了解了这些之后,我们就可以关注「冰河技术」微信公众号,后台回复不同的关键字获取相应的PDF文档。这些文档都是由冰河原创并整理的超硬核教程,包括《深入浅出Java 种设计模式》、《Java8新特性教程》和《亿级流量下的分布式限流解决方案》,都是面试必备的资料。

       最后,如果你觉得这篇文章对你有帮助,别忘了点个赞,给个在看和转发,让更多的人看到,一起学习,一起进步!

Spring框架@PostConstruct注解详解

       业务背景:在特定业务场景下,如程序启动时需从数据库加载数据并缓存于内存中,传统的依赖查找实现方法可满足需求,但寻求更优雅解决方案时,@PostConstruct注解应运而生。

       @PostConstruct注解的实现:此注解标记的方法会在Spring容器启动时自动执行。实现原理涉及注解功能描述、源码分析以及方法调用流程追溯。

       源码分析:@PostConstruct注解的原理核心在于依赖注入完成后的执行。通过CommonAnnotationBeanPostProcessor类的构造方法初始化注解类型,随后在PostProcessMergedBeanDefinition方法中,通过调用父类InitDestroyAnnotationBeanPostProcessor,实现对被@PostConstruct注解方法的调用。此过程中,通过反射机制执行方法。

       具体流程:在创建和初始化bean时,执行PostConstructTest实例的生命周期元数据方法,先进行依赖注入检查和属性赋值。当依赖注入完成,调用@PostConstruct注解方法。这一过程在bean属性赋值阶段完成,并在初始化前通过CommonAnnotationBeanPostProcessor调用postProcessBeforeInitialization方法,进一步通过反射执行@PostConstruct注解方法。

       总结:@PostConstruct注解在Spring容器刷新创建bean实例时构建生命周期元数据,在此元数据中保存注解方法,确保在属性赋值阶段完成依赖检查与注入。在初始化过程中,执行postProcessBeforeInitialization方法,利用反射机制调用@PostConstruct注解方法,实现特定业务场景下的自动执行。

spring boot test 类配置redis 连接

       要在Spring Boot测试类中配置Redis连接,需完成以下步骤:

       首先,添加Redis依赖:在pom.xml文件中添加Spring Data Redis的依赖项。具体代码如下:

       接下来,创建Redis连接配置类。在测试包中创建配置类,使用@Configuration注解将其标记为配置类,并使用@EnableRedisRepositories注解启用Redis仓库支持。示例代码如下:

       在示例中,创建RedisTestConfig类并使用@Configuration注解将其标记为配置类。同时,定义redisConnectionFactory()方法配置Redis连接工厂,使用redisTemplate()方法创建RedisTemplate对象,并设置连接工厂和值的序列化器。

       编写测试类。在测试类中使用@RunWith(SpringRunner.class)注解指定使用SpringRunner运行测试,并使用@ContextConfiguration注解指定要加载的配置类。示例代码如下:

       示例中使用@RunWith(SpringRunner.class)注解指定使用SpringRunner运行测试,并使用@SpringBootTest注解指定为Spring Boot测试,同时使用@ContextConfiguration注解指定要加载的配置类。

       在RedisTest类中使用@Autowired注解将RedisTemplate自动注入到测试类中。编写测试代码于testRedisConnection()方法,使用redisTemplate对象执行与Redis相关操作。

       完成以上步骤后,即可在Spring Boot测试类中配置Redis连接并执行测试代码。

SpringBoot——学会使用Test,检测自己写的代码

       本文将介绍如何在SpringBoot项目中有效地进行代码测试,确保代码质量。测试是开发过程中的重要环节,尽管测试代码不直接产生效益,但它是保障程序正确性的关键。

       在开发中,通过SpringBoot的测试专用属性和配置,可以方便地在测试环境中临时改变配置或模拟命令行参数,以适应不同场景的测试。例如,使用@SpringBootTest注解的properties属性可以覆盖源码中的配置,而args属性则用于模拟启动时的命令行参数。

       此外,测试专用配置允许我们在测试包中创建独立的Bean,专门用于测试环境,以适应不同的测试需求。对于Web环境的模拟测试,SpringBoot提供了自动配置MockMvc来发送web请求,并对响应结果进行比对,包括头信息、正文和状态信息。

       数据层测试中,SpringBoot的@Transactional注解能帮助我们控制事务提交,避免测试产生的数据对实际系统产生影响。配置中的随机值功能则确保测试数据的多样性,增强测试的可靠性。

       总之,掌握SpringBoot的测试技巧,可以帮助我们编写出更具信心和效率的测试用例,提升开发质量。测试不仅在开发过程中不可或缺,也是职业开发者必备的技能。

启动spring容器具体操作test为什么运行不起来

       如检查是否使用了我们组禁止使用的Mysql的group_concat函数,如果使用了项目就不能启动,并指出哪个文件的xml文件使用了这个函数。

       而在Spring的web项目中,我们可以介入Spring的启动过程。我们希望在Spring容器将所有的Bean都初始化完成之后,做一些操作,这个时候我们

本文地址:http://abssuliao.net/news/96b415795746.html

copyright © 2016 powered by 皮皮网   sitemap