Autogen_core 测试代码:test_cache_store.py

目录

    • 原始代码
    • 测试代码
    • 代码中用到的typing注解

原始代码

from typing import Dict, Generic, Optional, Protocol, TypeVarT = TypeVar("T")class CacheStore(Protocol, Generic[T]):"""This protocol defines the basic interface for store/cache operations.Sub-classes should handle the lifecycle of underlying storage."""def get(self, key: str, default: Optional[T] = None) -> Optional[T]:"""Retrieve an item from the store.Args:key: The key identifying the item in the store.default (optional): The default value to return if the key is not found.Defaults to None.Returns:The value associated with the key if found, else the default value."""...def set(self, key: str, value: T) -> None:"""Set an item in the store.Args:key: The key under which the item is to be stored.value: The value to be stored in the store."""...class InMemoryStore(CacheStore[T]):def __init__(self) -> None:self.store: Dict[str, T] = {}def get(self, key: str, default: Optional[T] = None) -> Optional[T]:return self.store.get(key, default)def set(self, key: str, value: T) -> None:self.store[key] = value

这段代码定义了一个缓存存储的基本接口和一个基于内存的实现。

  • 首先,它从typing模块导入了一些泛型类型定义,用于后续的类型注解。

  • 接着,定义了一个类型变量T,这是一个泛型占位符,用于表示存储在缓存中的数据的类型。

  • 然后,定义了一个名为CacheStore的协议类,它是一个泛型类,参数为T。这个类定义了缓存存储操作的基本接口,包括getset方法。get方法用于从存储中检索一个项,如果找不到指定的键,则返回默认值;set方法用于在存储中设置一个项。

  • 最后,定义了一个名为InMemoryStore的类,它继承自CacheStore并实现了getset方法。InMemoryStore使用一个字典self.store来在内存中存储数据。get方法通过键来获取存储中的值,如果键不存在,则返回默认值;set方法用于将一个键值对存储到字典中。

总的来说,这段代码定义了一个缓存存储的接口和一个简单的内存存储实现,使得可以通过键来存取数据,并提供了一个默认值机制。

测试代码

from unittest.mock import Mockfrom autogen_core import CacheStore, InMemoryStoredef test_set_and_get_object_key_value() -> None:mock_store = Mock(spec=CacheStore)test_key = "test_key"test_value = object()mock_store.set(test_key, test_value)mock_store.get.return_value = test_valuemock_store.set.assert_called_with(test_key, test_value)assert mock_store.get(test_key) == test_valuetest_set_and_get_object_key_value()

第一段代码定义了一个名为 test_set_and_get_object_key_value 的测试函数。这个函数测试了一个缓存存储对象(通过 Mock 模拟的)的 setget 方法。具体步骤如下:

  1. 创建一个 Mock 对象 mock_store,它模拟了 CacheStore 类。
  2. 定义了一个测试用的键 test_key 和一个测试用的值 test_value(这里是一个新的 object 实例)。
  3. 调用 mock_store.set(test_key, test_value) 来模拟设置键值对。
  4. 设置 mock_store.get 方法的返回值为 test_value,这样当调用 get 方法时,它会返回之前设置的值。
  5. 通过 mock_store.set.assert_called_with(test_key, test_value) 断言 set 方法是否被正确调用。
  6. 断言 mock_store.get(test_key) 的返回值是否等于 test_value

这个测试函数检查了存储对象是否能够正确地设置和获取键值对。

def test_get_non_existent_key() -> None:mock_store = Mock(spec=CacheStore)key = "non_existent_key"mock_store.get.return_value = Noneassert mock_store.get(key) is Nonetest_get_non_existent_key()

第二段代码定义了一个名为 test_get_non_existent_key 的测试函数。这个函数测试了当请求一个不存在的键时,缓存存储对象的行为。具体步骤如下:

  1. 创建一个 Mock 对象 mock_store,模拟了 CacheStore 类。
  2. 定义一个不存在的键 key
  3. 设置 mock_store.get 方法的返回值为 None
  4. 断言 mock_store.get(key) 的返回值是否为 None

这个测试函数检查了当请求的键不存在时,存储对象是否返回 None

def test_set_overwrite_existing_key() -> None:mock_store = Mock(spec=CacheStore)key = "test_key"initial_value = "initial_value"new_value = "new_value"mock_store.set(key, initial_value)mock_store.set(key, new_value)mock_store.get.return_value = new_valuemock_store.set.assert_called_with(key, new_value)assert mock_store.get(key) == new_valuetest_set_overwrite_existing_key() 

第三段代码定义了一个名为 test_set_overwrite_existing_key 的测试函数。这个函数测试了设置一个已经存在的键时,缓存存储对象是否会覆盖旧的值。具体步骤如下:

  1. 创建一个 Mock 对象 mock_store,模拟了 CacheStore 类。
  2. 定义了一个键 key 和两个值 initial_valuenew_value
  3. 调用 mock_store.set(key, initial_value) 来模拟设置初始键值对。
  4. 再次调用 mock_store.set(key, new_value) 来模拟覆盖设置键值对。
  5. 设置 mock_store.get 方法的返回值为 new_value
  6. 断言 mock_store.set 是否被用 keynew_value 调用。
  7. 断言 mock_store.get(key) 的返回值是否等于 new_value

这个测试函数检查了设置已存在的键时,存储对象是否正确地覆盖了旧的值。

def test_inmemory_store() -> None:store = InMemoryStore[int]()test_key = "test_key"test_value = 42store.set(test_key, test_value)assert store.get(test_key) == test_valuenew_value = 2store.set(test_key, new_value)assert store.get(test_key) == new_valuekey = "non_existent_key"default_value = 99assert store.get(key, default_value) == default_valuetest_inmemory_store()

第四段代码定义了一个名为 test_inmemory_store 的测试函数。这个函数测试了 InMemoryStore 类(一个内存中的存储实现)的 setget 方法。具体步骤如下:

  1. 创建一个 InMemoryStore 实例,用于存储整数类型。
  2. 定义了一个测试用的键 test_key 和一个测试用的值 test_value
  3. 调用 store.set(test_key, test_value) 来设置键值对。
  4. 断言 store.get(test_key) 的返回值是否等于 test_value
  5. 定义一个新的值 new_value,并使用 store.set(test_key, new_value) 来覆盖之前的键值对。
  6. 断言 store.get(test_key) 的返回值是否等于 new_value
  7. 定义一个不存在的键 key 和一个默认值 default_value
  8. 断言 store.get(key, default_value) 的返回值是否等于 default_value

这个测试函数检查了 InMemoryStore 是否能够正确地设置和获取键值对,以及当键不存在时是否返回默认值。

总的来说,这些代码片段是对缓存存储系统的单元测试,它们确保了存储接口的正确实现,包括设置和获取键值对以及处理不存在的键的情况。

代码中用到的typing注解

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
参考链接:https://github.com/microsoft/autogen/blob/main/python/packages/autogen-core/tests/test_cache_store.py

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

文件上传2

BUUCTF 你传你🐎呢 先上传.htaccess 修改格式 即可上传成功 返回上传图片格式的木马 用蚁剑连接 5ecf1cca-59a1-408b-b616-090edf124db5.node5.buuoj.cn:81/upload/7d8511a847edeacb5385299396a96d91/rao.jpg 即可得到flag [GXYCTF2019]BabyUpload

挂载mount

文章目录 1.挂载的概念(1)挂载命令:mount -t nfs(2)-t 选项:指定要挂载的文件系统类型(3)-o选项 2.挂载的目的和作用(1)跨操作系统访问:将Windows系统内容挂载到Linux系统下(2)访问外部存储设备(3)整合不同的存储设备 3.文件系统挂载要做的事…

UE求职Demo开发日志#15 思路与任务梳理、找需要的资源

1 思路梳理 因为有点无从下手,就梳理下最终形态. 基地的建设我是想单独一个场景,同一个关卡中小怪会每次来都会刷,小解密一次性的,关键的Boss和精英怪不会重复刷,同时场景里放一些资源可收集,基地建设锁定区…

vulfocus/thinkphp:6.0.12 命令执行

本次测试是在vulfocus靶场上进行 漏洞介绍 在其6.0.13版本及以前,存在一处本地文件包含漏洞。当多语言特性被开启时,攻击者可以使用lang参数来包含任意PHP文件。 虽然只能包含本地PHP文件,但在开启了register_argc_argv且安装了pcel/pear的环境下,可以包含/usr/local/lib/…

洛谷P3884 [JLOI2009] 二叉树问题(详解)c++

题目链接:P3884 [JLOI2009] 二叉树问题 - 洛谷 | 计算机科学教育新生态 1.题目解析 1:从8走向6的最短路径,向根节点就是向上走,从8到1会经过三条边,向叶节点就是向下走,从1走到6需要经过两条边&#xff0c…

如何获取小程序的code在uniapp开发中

如何获取小程序的code在uniapp开发中,也就是本地环境,微信开发者工具中获取code,这里的操作是页面一进入就获取code登录,没有登录页面的交互,所以写在了APP.vue中,也就是小程序一打开就获取用户的code APP.…

k8s支持自定义field-selector spec.hostNetwork过滤

好久没写博客啦,年前写一个博客就算混过去啦😂 写一个小功能,对于 Pod,在没有 label 的情况下,支持 --field-selector spec.hostNetwork 查询 Pod 是否为 hostNetwork 类型,只为了熟悉 APIServer 是如何构…

olloama下载deepseek-r1大模型本地部署

1.登录olloama,选择models,选择deepseek-r1模型,选择1.5b(核显电脑) 2.选择1.5b,复制命令,打开CMD控制台; 3.控制台输入ollama run deepseek-r1:1.5b自动下载 4.部署完成 5.退出【Ctrl d】or 【/bye】 …

C语言初阶力扣刷题——349. 两个数组的交集【难度:简单】

1. 题目描述 力扣在线OJ题目 给定两个数组,编写一个函数来计算它们的交集。 示例: 输入:nums1 [1,2,2,1], nums2 [2,2] 输出:[2] 输入:nums1 [4,9,5], nums2 [9,4,9,8,4] 输出:[9,4] 2. 思路 直接暴力…

python学opencv|读取图像(四十九)使用cv2.bitwise()系列函数实现图像按位运算

【0】基础定义 按位与运算:两个等长度二进制数上下对齐,全1取1,其余取0。 按位或运算:两个等长度二进制数上下对齐,有1取1,其余取0。 按位异或运算: 两个等长度二进制数上下对齐,相…

ZZNUOJ(C/C++)基础练习1011——1020(详解版)

1011 : 圆柱体表面积 题目描述 输入圆柱体的底面半径r和高h,计算圆柱体的表面积并输出到屏幕上。要求定义圆周率为如下宏常量 #define PI 3.14159 输入 输入两个实数,表示圆柱体的底面半径r和高h。 输出 输出一个实数,即圆柱体的表面积&…

HTML特殊符号的使用示例

目录 一、基本特殊符号的使用 1、空格符号: 2、小于号 和 大于号: 3、引号: 二、版权、注册商标符号的使用 1、版权符号:© 2、注册商标符号: 三、数学符号的使用 四、箭头符号的使用 五、货币符号的使用…

java基础-容器

一、集合基础 1、集合 Collection接口下,主要用于存放单一元素Map接口下,用于存放键值对 2、常见集合的比较 List 存储的元素是有序的、可重复的。Set: 存储的元素不可重复的。Queue: 按特定的排队规则来确定先后顺序,存储的元素是有序的、…

嵌入式知识点总结 ARM体系与架构 专题提升(三)-中断与异常

针对于嵌入式软件杂乱的知识点总结起来,提供给读者学习复习对下述内容的强化。 目录 1.中断与异常有何区别? 2.中断与DMA有何区别? 3.中断能不能睡眠,为什么?下半部能不能睡眠? 4.中断的响应执行流程是什么&#…

从替代到覆盖:暴雨信创服务器打开市场新局面

进入2025年,全球局势更加变幻莫测,高科技领域越来越受到全球局势影响。美国前任总统拜登在卸任前,特别颁布限制GPU产品出口法案。新任总统特朗普上任第一天,废除了多项之前法案,但显示技术交流的内容一条没变。 在如此艰难的局面下,我国信创市场的发展显得尤为重要,国家也从政策…

机器人抓取与操作经典规划算法(深蓝)——2

1 经典规划算法 位姿估计:(1)相机系位姿 (2)机器人系位姿 抓取位姿:(1)抓取位姿计算 (2)抓取评估和优化 路径规划:(1)笛卡…

C++二叉树进阶

1.二叉搜索树 1.1二叉搜索树概念 二叉搜索树又称二叉排序树,它或者是一颗空树,或者具有以下性质的二叉树 若它的左子树不为空,则左子树上所有结点的值小于根节点的值若它的右子树不为空,则右子树上所有节点的值都大于根节点的值…

“AI视频智能分析系统:让每一帧视频都充满智慧

嘿,大家好!今天咱们来聊聊一个特别厉害的东西——AI视频智能分析系统。想象一下,如果你有一个超级聪明的“视频助手”,它不仅能自动识别视频中的各种元素,还能根据内容生成详细的分析报告,是不是感觉特别酷…

神经网络|(五)概率论基础知识-条件概率

【1】引言 前序完成了古典概型知识的简单学习,今天在此基础上开始条件概率的学习。古典概型的学习文章为:神经网络|(四)概率论基础知识-古典概型-CSDN博客 【2】条件概率 条件概率就是在A事件已经发生的条件下,B事件发生的概率。 设A、B是…

分布式版本控制系统:Git

1 Git概述 Git官网:https://git-scm.com/ Git是一个免费的、开源的分布式版本控制系统,可以快速高效地处理从小型到大型的各种项目Git易于学习,占地面积小,性能极快。它具有廉价的本地库、方便的暂存区域和多个工作流分支等特性…