diff --git a/aioj-backend-user-service/src/test/java/cn/meowrain/aioj/backend/userservice/service/EmailServiceTest.java b/aioj-backend-user-service/src/test/java/cn/meowrain/aioj/backend/userservice/service/EmailServiceTest.java new file mode 100644 index 0000000..301456d --- /dev/null +++ b/aioj-backend-user-service/src/test/java/cn/meowrain/aioj/backend/userservice/service/EmailServiceTest.java @@ -0,0 +1,86 @@ +package cn.meowrain.aioj.backend.userservice.service; + +import lombok.extern.slf4j.Slf4j; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.data.redis.core.StringRedisTemplate; +import org.springframework.test.context.ActiveProfiles; + +import static org.junit.jupiter.api.Assertions.*; + +/** + * 邮件服务测试类 + */ +@Slf4j +@SpringBootTest +@ActiveProfiles("test") +class EmailServiceTest { + + @Autowired + private EmailService emailService; + + @Autowired + private StringRedisTemplate redisTemplate; + + /** + * 测试发送验证码邮件 + * 注意:运行此测试前,请将下面的邮箱地址替换为你自己的邮箱 + */ + @Test + void testSendVerifyCode() { + // TODO: 替换成你的真实邮箱地址 + String testEmail = "meowrain@126.com"; + + log.info("开始发送验证码到邮箱: {}", testEmail); + + // 发送验证码 + assertDoesNotThrow(() -> emailService.sendVerifyCode(testEmail)); + + log.info("验证码邮件发送成功,请检查邮箱(含垃圾邮件文件夹)"); + + // 验证 Redis 中是否存储了验证码 + String redisKey = "email:code:" + testEmail; + String code = redisTemplate.opsForValue().get(redisKey); + + assertNotNull(code, "验证码应该存储在 Redis 中"); + log.info("Redis 中存储的验证码: {}", code); + + // 提示用户 + log.info("==============================================="); + log.info("请登录邮箱查看验证码: {}", testEmail); + log.info("验证码: {}", code); + log.info("==============================================="); + } + + /** + * 测试连续发送验证码(应该覆盖之前的验证码) + */ + @Test + void testSendMultipleCodes() { + String testEmail = "your-email@qq.com"; + + log.info("测试连续发送两次验证码"); + + // 第一次发送 + emailService.sendVerifyCode(testEmail); + String firstCode = redisTemplate.opsForValue().get("email:code:" + testEmail); + log.info("第一次验证码: {}", firstCode); + + // 等待 1 秒 + try { + Thread.sleep(1000); + } + catch (InterruptedException e) { + e.printStackTrace(); + } + + // 第二次发送 + emailService.sendVerifyCode(testEmail); + String secondCode = redisTemplate.opsForValue().get("email:code:" + testEmail); + log.info("第二次验证码: {}", secondCode); + + assertNotNull(secondCode, "第二次发送后应该有新的验证码"); + } + +} diff --git a/aioj-backend-user-service/src/test/resources/application-test.yml b/aioj-backend-user-service/src/test/resources/application-test.yml new file mode 100644 index 0000000..3c20d1d --- /dev/null +++ b/aioj-backend-user-service/src/test/resources/application-test.yml @@ -0,0 +1,26 @@ +spring: + mail: + host: smtp.qq.com + port: 465 + username: 2705356115@qq.com + password: yohcndfrlxwcdfed + default-encoding: UTF-8 + protocol: smtp + properties: + mail: + smtp: + ssl: + enable: true + auth: true + starttls: + enable: true + data: + redis: + host: 10.0.0.10 + port: 6379 + password: 123456 + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://10.0.0.10/aioj_dev + username: root + password: root