Java单元测试学习(一)

Java单元测试学习(一)

使用TestContainer和docker结合启动redis

前提

  • docker环境

目录结构

在这里插入图片描述

依赖—这里有个小插曲

配置RedisTemplate时一直报错Error creating bean with name ‘redisConnectionFactory’ defined in class path resource [org/springframework/boot/autoconfigure/data/redis/LettuceConnectionConfiguration.class]: Bean instantiation via factory method failed;---->最后的解决方式是①删除了common-pool2版本号②将jdk的版本从1.8升到了11----->把springboot版本降为2.5.5就不会出现报错

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.6</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.atguigu</groupId><artifactId>redis_springboot</artifactId><version>0.0.1-SNAPSHOT</version><name>redis_springboot</name><description>Demo project for Spring Boot</description><properties><maven.compiler.source>11</maven.compiler.source><maven.compiler.target>11</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><!-- test --><testcontainers.version>1.15.3</testcontainers.version><!-- redis --><commons.version>2.9.0</commons.version><!-- lombok --><lombok.version>1.18.12</lombok.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!-- testcontainer --><dependency><groupId>org.testcontainers</groupId><artifactId>testcontainers</artifactId><version>${testcontainers.version}</version><scope>test</scope></dependency><dependency><groupId>org.testcontainers</groupId><artifactId>junit-jupiter</artifactId><version>${testcontainers.version}</version><scope>test</scope></dependency><!-- redis --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><!-- spring2.X集成redis所需common-pool2--><dependency><groupId>org.apache.commons</groupId><artifactId>commons-pool2</artifactId>
<!--            <version>${commons.version}</version>--></dependency><!-- lombok --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>${lombok.version}</version><scope>provided</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

相关代码

  • RedisConfig
package com.atguigu.redis_springboot.config;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;import javax.annotation.Resource;@Configuration
public class RedisConfig {@Resourceprivate RedisConnectionFactory connectionFactory;@Beanpublic RedisTemplate<String,Object> redisTemplate() {RedisTemplate<String,Object> redisTemplate = new RedisTemplate<>();redisTemplate.setKeySerializer(new StringRedisSerializer());redisTemplate.setHashKeySerializer(new StringRedisSerializer());redisTemplate.setConnectionFactory(connectionFactory);return redisTemplate;}}
  • RedisTestController
package com.atguigu.redis_springboot.controller;import com.atguigu.redis_springboot.service.RedisService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.annotation.Resource;/*** @author snape* @create 2022-05-28 21:03*/
@RestController
@RequestMapping("/redisTest")
public class RedisTestController {@Resourceprivate RedisService redisService;@GetMappingpublic String testRedis() {//设置值到redisredisService.set("name","tom");//从redis获取值String name = redisService.get("name");return name;}}
  • RedisService
package com.atguigu.redis_springboot.service;import lombok.AllArgsConstructor;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;/*** @author Snape* @create 2023-06-05 11:52* @desc*/
@Component
@RequiredArgsConstructor
public class RedisService {private final RedisTemplate<String, String> redisTemplate;public void set(String key, String value) {redisTemplate.opsForValue().set(key, value);}public String get(String key) {return redisTemplate.opsForValue().get(key);}
}
  • RedisSpringbootApplication
package com.atguigu.redis_springboot;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class RedisSpringbootApplication {public static void main(String[] args) {SpringApplication.run(RedisSpringbootApplication.class, args);}}
  • application.yml
spring:application:name: redis-springbootredis:database: 0timeout: 1800000lettuce:pool:max-active: 20max-wait: -1max-idle: 5min-idle: 0
  • RedisContainer
package com.atguigu.redis_springboot.redis;import org.testcontainers.containers.GenericContainer;/*** @author Snape* @create 2023-06-05 11:41* @desc*/
public class RedisContainer extends GenericContainer<RedisContainer> {public static final String IMAGE_VERSION = "redis:latest";private static final int DEFAULT_PORT = 6379;public RedisContainer() {this(IMAGE_VERSION);}public RedisContainer(String imageVersion) {super(imageVersion == null ? IMAGE_VERSION : imageVersion);addExposedPort(DEFAULT_PORT);start();}public String getPort() {return getMappedPort(DEFAULT_PORT).toString();}}
  • RedisServiceTest
package com.atguigu.redis_springboot.service;import com.atguigu.redis_springboot.RedisSpringbootApplicationTests;
import org.junit.After;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;import static org.junit.jupiter.api.Assertions.assertEquals;/*** @author Snape* @create 2023-06-05 13:57* @desc*/
public class RedisServiceTest extends RedisSpringbootApplicationTests {@Autowiredprivate RedisService redisService;@Testpublic void testRedis() {redisService.set("name", "tom");String name = redisService.get("name");assertEquals("tom", name);}@Afterpublic void destroy() {redisContainer.stop();}}
  • RedisSpringbootApplicationTests
package com.atguigu.redis_springboot;import com.atguigu.redis_springboot.redis.RedisContainer;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.DynamicPropertyRegistry;
import org.springframework.test.context.DynamicPropertySource;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import org.springframework.test.context.junit4.SpringRunner;
import org.testcontainers.junit.jupiter.Container;
import org.testcontainers.junit.jupiter.Testcontainers;@SpringBootTest(classes = RedisSpringbootApplication.class,webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@RunWith(SpringRunner.class)
@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_CLASS)
@ExtendWith(SpringExtension.class)
@Testcontainers
public abstract class RedisSpringbootApplicationTests {@Containerpublic static final RedisContainer redisContainer =new RedisContainer();@DynamicPropertySourcepublic static void registerProperties(DynamicPropertyRegistry registry) {registry.add("spring.redis.host", redisContainer::getHost);registry.add("spring.redis.port", redisContainer::getPort);}}

测试

  • 在test方法里打上断点,开启debug后可查看到启动的容器
    在这里插入图片描述

  • 测试通过
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/353344.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

地震勘探基础(八)之地震动校正

地震动校正 在地震资料数字处理过程中&#xff0c;速度分析&#xff0c;动校正和水平叠加三个处理内容是相互关联的。水平叠加是为了提高地震资料的信噪比&#xff0c;要想得到好的叠加效果&#xff0c;必须做好动校正。而做好动校正&#xff0c;需要进行准确的速度分析。只有…

独立站卖家如何应对PayPal风险?3大策略教你安全收款!

PayPal是全球风险控制做得最好的第三方在线支付平台&#xff0c;PayPal付款是钱直接到卖家PayPal账户。但随着外贸交易的日益发展&#xff0c;恶意买家的问题也越来越多。如何防范风险&#xff0c;保证收款安全&#xff0c;成为独立站卖家们所关注的问题。下面为大家分享三种策…

pyhon的运算符和字符串格式化方式

pyhton的变量类型 这里可以值得一提的是&#xff0c;python是一种弱类型的语言&#xff0c;使用的感觉有些像C的auto变量类型&#xff0c;定义变量不需要写类型名字&#xff0c;只需要变量名就会自动匹配 # int a 10 # float b 10.333 # string c "nihao" # dic…

oracle自定义函数 for in loop示例

1、新建type&#xff0c;就是返回结果集有什么&#xff0c;这里就写什么&#xff08;相当于表的字段&#xff09; CREATE OR REPLACE TYPE "TYPE_NQ_FORM_STATISTICS" as object (recordid varchar2(500),form_name varchar2(200),sortone varchar2(100),sorttwo …

辨别MagicKeyboard的真伪(序列号验证版)

RT 楼主前两天海鲜市场买了一个magic Keyboard, 大概是这个样子的 起来感觉没啥差别&#xff0c;橙色也蛮好。 今天某位大佬告诉我鉴别真假的方法&#xff0c;看了之后我心都凉了 写出来给大家避避坑 将键盘用连接到Mac电脑上&#xff0c;打开系统报告&#xff0c;看USB下面的…

WinMerge使用

1、介绍&#xff1a;是一款运行于Windows系统下的免费开源的文件比较/合并工具&#xff0c;使用它可以非常方便地比较多个文档内容甚至是文件夹与文件夹之间的文件差异。 2、对于测试人员的作用&#xff1a;可以用来比较测试数据内容&#xff0c;如在进行回归测试报表数据的时…

windows系统上使用magic trackpad妙控触摸板

windows系统上使用magic trackpad妙控触摸板 另外出自用全新 jd自营随时可以全保换新 jd自营购买的 apple magic trakpad 妙控板 还有保险 随时可换新 前言 最近在家学习很少打游戏&#xff0c;想了一下翻出了我箱子里我之前mac mini用的trackpad&#xff0c;因为我之前的笔…

magic-api 框架使用

概述 先说一下为什么选择这个框架,在搬砖过程中百分之八十的代码是增删改查操作,复杂的逻辑只是占了不多部分,这个框架能够使简单增删改查的时间大大减少. magic-api 是一个基于Java的接口快速开发框架&#xff0c;编写接口将通过magic-api提供的UI界面完成&#xff0c;自动映…

Git for windows 和 cygwin

git for windows 根目录和安装目录 C:\Program Files\Gitcygwin 根目录和安装目录 C:\cygwin64建议环境变量设置. cygwin使用gitFW的命令 cygwin下装 vim插件 cygwin 配置 在当前目录打开cygwin(存在无法在中文路径下打开目录的问题) 计算机\HKEY_CLASSES_ROOT\Director…

WINCE KITL工具

KITL(Kernel Independent Transport Layer)是基于Windows CE平台的一种软件技术&#xff0c;开发商基于它可以很容易地支持各种调试功能。因为WindowsCE的调试是一种远程调试&#xff0c;所以开发工作站&#xff08;运行PB的机器&#xff09;和设备端必须要有相应的通信通道&am…

Windows--cygwin

原文网址&#xff1a;Windows--cygwin_IT利刃出鞘的博客-CSDN博客 写在前头的话 cygwin只是模拟一个Linux环境&#xff0c;使用它无法进入Windows系统的盘的路径&#xff0c;个人认为不如git bash好用。 下载 Cygwin InstallationIndex of /cygwin/Index of /cygwin/ 安装 …

如何获取 C#程序 内核态线程栈

一&#xff1a;背景 1. 讲故事 在这么多的案例分析中&#xff0c;往往会发现一些案例是卡死在线程的内核态栈上&#xff0c;但拿过来的dump都是用户态模式下&#xff0c;所以无法看到内核态栈&#xff0c;这就比较麻烦&#xff0c;需要让朋友通过其他方式生成一个蓝屏的dump&…

win7配置magic mouse和keyboard

记录一下我是如何在win7下配置magic mouse 和keyboard的。 首先打开笔记本的蓝牙&#xff0c;然后进入到控制面板&#xff0c;找到添加设备。 键盘很好添加&#xff0c;当屏幕显示一串数字时&#xff0c;到键盘上去按对应的数字键就行了。 让我意外的鼠标的配置&#xff0c;…

NYOJ 348 Magic

题目链接&#xff1a;http://acm.nyist.net/JudgeOnline/problem.php?pid348 题意&#xff1a;给你n张牌&#xff0c;让你变一个魔术&#xff1a;第1次把上面的1张牌放到底部&#xff0c;然后最上面的牌就是1&#xff0c;然后拿走1。第2次把上面的2张牌依次放到底部&#xff…

D. Magic Gems

http://codeforces.com/contest/1117/problem/D 题意&#xff1a;n&#xff0c;m(1e18) &#xff1b;有一些魔法石&#xff0c;一个魔法石可以分裂成m个普通宝石&#xff0c;每个宝石站一个单位空间&#xff1b;问有多少集合使得站n个空间&#xff1b; 思路&#xff1a; #inc…

以全能之力造非凡旗舰:荣耀Magic3系列新品发布

8月12日&#xff0c;标志性全能科技旗舰荣耀Magic3系列新品正式发布&#xff0c;荣耀Magic3、荣耀Magic3 Pro、荣耀Magic3至臻版三款机型集中亮相。 融合秩序美学、高端材质、美妙破晓时刻&#xff0c;造就非凡设计&#xff1b;延续荣耀AI与影像优势&#xff0c;首次将电影工业…

【实用工具】magic-api接口快速开发框架

【实用工具】magic-api接口快速开发框架 magic-api是一个基于Java的接口快速开发框架&#xff0c;编写接口将通过magic-api提供的UI界面完成&#xff0c;自动映射为HTTP接口。 无需定义Controller、Service、Dao、Mapper、XML、VO等Java对象即可完成常见的HTTP API接口开发。 …

magics24安装教程|magics中文版下载

magics24是由Materialise公司推出的一款功能强大的平面数据处理软件&#xff0c;通过它&#xff0c;能够使用户用最短的前置时间提供高质量样品&#xff0c;并在此过程提供全部文件&#xff0c;非常实用。该软件在完整性、灵活性、强大行和易用性等各个方面都具有不可代替的优势…

C# Winform控件包 MaterialSkin使用教程 免费开源,支持中文!

如果没有拿到控件包DLL的可以去这篇文章里自取。C# Winform控件包分享&#xff0c;免费开源&#xff0c;支持中文&#xff01; 控件比较多&#xff0c;我会抽出时间分控件逐一书写教程&#xff0c;不定时更新&#xff0c;感兴趣的朋友可以关注我。 本文将在以下几个方面进行指…

5.2.6 地址解析协议ARP

5.2.6 地址解析协议ARP 我们知道要想实现全球范围内主机之间的通信&#xff0c;必须要有两个统一&#xff0c;一个是地址&#xff0c;另一个是数据格式&#xff0c;我们使用IP地址来实现统一的地址&#xff0c;使用IP分组实现统一的数据格式&#xff0c;在前面局域网的学习中我…