当前位置: 首页 > article >正文

Autogen_core 测试代码:test_cache_store.py

目录

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

原始代码

from typing import Dict, Generic, Optional, Protocol, TypeVar

T = 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 Mock

from autogen_core import CacheStore, InMemoryStore


def 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_value
    mock_store.set.assert_called_with(test_key, test_value)
    assert mock_store.get(test_key) == test_value

test_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 = None
    assert mock_store.get(key) is None


test_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_value
    mock_store.set.assert_called_with(key, new_value)
    assert mock_store.get(key) == new_value

test_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 = 42
    store.set(test_key, test_value)
    assert store.get(test_key) == test_value

    new_value = 2
    store.set(test_key, new_value)
    assert store.get(test_key) == new_value

    key = "non_existent_key"
    default_value = 99
    assert store.get(key, default_value) == default_value
    
test_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.kler.cn/a/524538.html

相关文章:

  • 【Go语言圣经】第五节:函数
  • 开发环境搭建-4:WSL 配置 docker 运行环境
  • 升级到Mac15.1后pod install报错
  • 能说说MyBatis的工作原理吗?
  • 学习数据结构(2)空间复杂度+顺序表
  • echo ‘export PATH=/usr/local/bin:$PATH‘ >> ~/.bashrc这个和直接添加到/etc/profile有什么区别
  • 003 mapper代理开发方式-注解方式
  • 64位的谷歌浏览器Chrome/Google Chrome
  • Maven项目JUnit测试的远程调试技巧
  • 深度学习中常用的评价指标方法
  • 剑指 Offer II 002. 二进制加法
  • 探索高效图像识别:基于OpenCV的形状匹配利器
  • git中有关old mode 100644、new mode 10075的问题解决小结
  • EtherCAT主站IGH-- 19 -- IGH之fsm_pdo.h/c文件解析
  • DeepSeek R1有什么不同
  • H264原始码流格式分析
  • 探索AI(chatgpt、文心一言、kimi等)提示词的奥秘
  • 【2024年华为OD机试】(C卷,200分)- 最长子字符串的长度(二) (JavaScriptJava PythonC/C++)
  • 自由窗口边框阴影描绘方案汇总-社群讨论学习
  • AUTOSAR从入门到精通-高级驾驶辅助系统(ADAS)
  • 数据结构的队列
  • Helm Chart 实战指南
  • 菜鸟之路Day05一一正则表达式
  • js笔记(黑马程序员)
  • DeepSeek模型:开启人工智能的新篇章
  • Spring Boot - 数据库集成05 - 集成MongoDB