首页 > 其他分享 >IpAddressService ip地址参数校验 allIpAddressCheck 单元测试

IpAddressService ip地址参数校验 allIpAddressCheck 单元测试

时间:2024-11-21 09:30:18浏览次数:1  
标签:IpAddressService allIpAddressCheck ip request invocation import AllIpAddressChec

当然,我可以帮助您修改所有的单元测试代码,以确保它们都能正确地使用 doAnswer 方法来模拟 void 返回类型的方法。以下是修改后的所有单元测试代码:

package com.example.service.impl;

import com.example.entity.AllIpAddressCheckRequest;
import com.example.entity.AllIpAddressCheckResponse;
import com.example.exception.TitanException;
import com.example.service.IpAddressService;
import com.example.service.IpCheckService;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.CountDownLatch;

import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.ArgumentMatchers.anyMap;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.*;

class IpAddressServiceImplTest {

    @Mock
    private IpCheckService ipCheckService;

    @InjectMocks
    private IpAddressService ipAddressService = new IpAddressServiceImpl();

    @BeforeEach
    void setUp() {
        MockitoAnnotations.openMocks(this);
    }

    @Test
    void testAllIpAddressCheckWithValidIps() throws InterruptedException {
        // 准备测试数据
        AllIpAddressCheckRequest request = new AllIpAddressCheckRequest();
        request.setIpAddressList(Arrays.asList("192.168.1.1", "10.0.0.1"));

        // 使用 doAnswer 而不是 thenAnswer
        doAnswer(new Answer<Void>() {
            @Override
            public Void answer(InvocationOnMock invocation) throws Throwable {
                String ipAddress = invocation.getArgument(0);
                Map<String, Boolean> map = invocation.getArgument(1);
                CountDownLatch latch = invocation.getArgument(2);
                map.put(ipAddress, true);
                latch.countDown();
                return null; // 注意这里返回 null
            }
        }).when(ipCheckService).asyncIpCheck(anyString(), anyMap(), any(CountDownLatch.class));

        // 执行测试
        AllIpAddressCheckResponse response = ipAddressService.allIpAddressCheck(request);

        // 验证结果
        assertTrue(response.getResult());
        assertEquals(2, response.getMap().size());
        assertTrue(response.getMap().get("192.168.1.1"));
        assertTrue(response.getMap().get("10.0.0.1"));
    }

    @Test
    void testAllIpAddressCheckWithInvalidIps() {
        // 准备测试数据
        AllIpAddressCheckRequest request = new AllIpAddressCheckRequest();
        request.setIpAddressList(Arrays.asList("192.168.1.1", "invalid-ip"));

        // 使用 doAnswer 而不是 thenAnswer
        doAnswer(new Answer<Void>() {
            @Override
            public Void answer(InvocationOnMock invocation) throws Throwable {
                String ipAddress = invocation.getArgument(0);
                Map<String, Boolean> map = invocation.getArgument(1);
                CountDownLatch latch = invocation.getArgument(2);
                if (ipAddress.equals("192.168.1.1")) {
                    map.put(ipAddress, true);
                } else {
                    map.put(ipAddress, false);
                }
                latch.countDown();
                return null; // 注意这里返回 null
            }
        }).when(ipCheckService).asyncIpCheck(anyString(), anyMap(), any(CountDownLatch.class));

        // 执行测试
        assertThrows(TitanException.class, () -> ipAddressService.allIpAddressCheck(request));
    }

    @Test
    void testAllIpAddressCheckWithEmptyRequest() {
        // 准备测试数据
        AllIpAddressCheckRequest request = new AllIpAddressCheckRequest();

        // 执行测试
        assertThrows(TitanException.class, () -> ipAddressService.allIpAddressCheck(request));
    }

    @Test
    void testAllIpAddressCheckWithNullRequest() {
        // 执行测试
        assertThrows(TitanException.class, () -> ipAddressService.allIpAddressCheck(null));
    }

    @Test
    void testAllIpAddressCheckWithEmptyIpList() {
        // 准备测试数据
        AllIpAddressCheckRequest request = new AllIpAddressCheckRequest();
        request.setIpAddressList(new ArrayList<>());

        // 执行测试
        assertThrows(TitanException.class, () -> ipAddressService.allIpAddressCheck(request));
    }

    @Test
    void testAllIpAddressCheckWithInvalidIpFormat() {
        // 准备测试数据
        AllIpAddressCheckRequest request = new AllIpAddressCheckRequest();
        request.setIpAddressList(Arrays.asList("192.168.1.1", "256.0.0.1"));

        // 使用 doAnswer 而不是 thenAnswer
        doAnswer(new Answer<Void>() {
            @Override
            public Void answer(InvocationOnMock invocation) throws Throwable {
                String ipAddress = invocation.getArgument(0);
                Map<String, Boolean> map = invocation.getArgument(1);
                CountDownLatch latch = invocation.getArgument(2);
                if (ipAddress.equals("192.168.1.1")) {
                    map.put(ipAddress, true);
                } else {
                    map.put(ipAddress, false);
                }
                latch.countDown();
                return null; // 注意这里返回 null
            }
        }).when(ipCheckService).asyncIpCheck(anyString(), anyMap(), any(CountDownLatch.class));

        // 执行测试
        assertThrows(TitanException.class, () -> ipAddressService.allIpAddressCheck(request));
    }
}

解释

  1. testAllIpAddressCheckWithValidIps:

    • 模拟 asyncIpCheck 方法,使所有 IP 地址检查成功。
    • 验证返回结果中的所有 IP 地址都检查成功。
  2. testAllIpAddressCheckWithInvalidIps:

    • 模拟 asyncIpCheck 方法,使无效 IP 地址检查失败。
    • 验证 allIpAddressCheck 方法在有无效 IP 地址时抛出 TitanException
  3. testAllIpAddressCheckWithEmptyRequest:

    • 测试空请求对象的情况。
    • 验证 allIpAddressCheck 方法在请求对象为空时抛出 TitanException
  4. testAllIpAddressCheckWithNullRequest:

    • 测试请求对象为 null 的情况。
    • 验证 allIpAddressCheck 方法在请求对象为 null 时抛出 TitanException
  5. testAllIpAddressCheckWithEmptyIpList:

    • 测试 IP 地址列表为空的情况。
    • 验证 allIpAddressCheck 方法在 IP 地址列表为空时抛出 TitanException
  6. testAllIpAddressCheckWithInvalidIpFormat:

    • 模拟 asyncIpCheck 方法,使无效格式的 IP 地址检查失败。
    • 验证 allIpAddressCheck 方法在有无效格式的 IP 地址时抛出 TitanException

这些测试用例覆盖了多种不同的输入情况,确保 allIpAddressCheck 方法在不同情况下都能正确处理。

标签:IpAddressService,allIpAddressCheck,ip,request,invocation,import,AllIpAddressChec
From: https://www.cnblogs.com/lmzzr24/p/18559922

相关文章

  • NOIP 前随机选做
    CSP奋战两小时arena死活调不出,奇耻大辱哦。不如加练。20241028CSP-S2024T4很需要大脑清醒的一道题。自底往上对于每个询问\(\mathcalO(\logn)\)做是没有救的,大概就是从\(u\)开始往上跳,维护可以赢的确定的单点以及不会被已有点击败的未确定点的后缀。显然是要拆贡......
  • Spring之OCP开闭原则和DIP依赖倒置原则
    通过如下代码,来分析几个开发原则(OCP开闭原则和DIP依赖倒置原则)代码结构1.Test类packagecom.xu.spring6.client;importcom.xu.spring6.web.UserAction;publicclassTest{publicstaticvoidmain(String[]args){UserActionuserAction=newUserActio......
  • 鸿蒙实战开发—— IPC与RPC通信
    ......
  • 前端:JavaScript (学习笔记)【1】
    目录​​​​​​​一,介绍JavaScript二,JavaScript的特点1,脚本语言 2,基于对象的语言 3,事件驱动4,简单性5,安全性6,跨平台性7,JS和java的区别(1)公司不同,前身不同(2)基于对象和面向对象(3)变量类型强弱不同(4)运行的位置不同8,HTML和CSS和JS这之间的关系三,JavaScript的引入......
  • 洛谷算法题P1307 [NOIP2011 普及组] 数字反转
    题目题目描述给定一个整数N,请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零(参见样例2)。输入格式一个整数N。输出格式一个整数,表示反转后的新数。样例#1样例输入#1123样例输......
  • Windows 软件之 7zip 使用
    目录1重建图标2提取压缩文件信息3分卷压缩1重建图标1)图标文件展示:(1)0w0(2)木偶(3)Black-Hawk(4)推荐选择上述中的一种图标,然后将其7z.dll替换即可。也可以使得ResourceHacker软件,通过修改7z.dll来自定义图标图像。2)重建图标缓存,运行下方bat脚本:rem......
  • Gzip压缩文件和压缩字符串,web接口应用
    Gzip压缩文件和压缩字符串,web接口应用1.压缩文件packagecom.example.core.mydemo.gzip;importjava.io.FileInputStream;importjava.io.FileOutputStream;importjava.io.IOException;importjava.util.zip.GZIPInputStream;importjava.util.zip.GZIPOutputStream;/......
  • JavaScript初识及基本语法详解
    JavaScript是一种轻量级的编程语言,它可以在网页中嵌入,用来控制网页的动态效果和用户交互。JavaScript是所有现代网页浏览器都支持的脚本语言,它可以让网页变得“活”起来,实现各种复杂的功能。JavaScript的基本语法JavaScript的语法基础与Java语言类似,但它是解释型语言,不需要编......
  • 2024.11.20 NOIP模拟 - 模拟赛记录
    异或(xor)每次所加三角形的范围如图所示:这道题做法较多,我是通过两组差分与前缀和来做的。首先需要一个三角形差分,使每一次在差分数组中修改时,影响到的范围是一个三角形,比如这样(红色点为\((x,y)\),即\((r,c)\)):假设我们真正需要修改的三角形是橙色部分:那么联系到正常差分,很容......
  • DataGrip 连接数据库失败
    【原文:https://www.cnblogs.com/yuanchaoyong/p/11570510.html】66000][12505]Listenerrefusedtheconnectionwiththefollowingerror:ORA-12505,TNS:listenerdoesnotcurrentlyknowofSIDgiveninconnectdescriptororacle.net.ns.NetException:Listenerrefu......