使用 Python unittest 测试回调调用的正确方法是什么?

2024-02-27

我有一个如下所示的应用程序代码。

# Filename: app.py
class Foo:
    def __init__(self):
        self.callback = None

    def set_handler(self, callback):
        self.callback = callback

    def run(self, details):
        name, age = details.split('/')
        if age.isdigit():
            age = int(age)
        else:
            age = -1
        return self.callback(name, age)

如您所见,它提供了set_handler方法来设置回调。稍后必须使用两个参数调用回调:一个字符串和一个整数。我试图在单元测试中确保这一点。

# Filename: test_app.py
import unittest
from app import Foo

class AppTest(unittest.TestCase):
    def f(self, a, b):
        # This callback should get called with the first argument as
        # string and the second argument as integer
        return repr(a) + ',' + repr(b)

    def test_callback(self):
        foo = Foo()
        foo.set_handler(self.f)
        self.assertEqual(foo.run('John/20'), "'John',20")
        self.assertEqual(foo.run('John/xyz'), "'John',-1")

if __name__ == '__main__':
    unittest.main()

本次单元测试成功。但我不认为我的测试方法是可靠的。这个单元测试基本上是一个黑客,因为我不知道如何正确测试是否使用正确类型的参数调用了回调。我觉得奇怪的是 AppTest 的f方法通过尝试返回由以下内容组成的值来分担类型检查的责任repr()论点,至少可以说,这根本不可靠。

请你帮助我好吗?是否可以缓解f测试责任的方法有哪些类型?


EDIT:

尝试使用unittest.mock http://docs.python.org/dev/library/unittest.mock(Python 3.3 上的标准库)。它允许您断言方法是如何调用的。例如:

import unittest
from unittest.mock import Mock

from app import Foo

class AppTest(unittest.TestCase):

    def test_callback(self):
        foo = Foo()
        f = Mock()
        foo.set_handler(f)

        foo.run('John/20')
        f.assert_called_with('John', 20)

        foo.run('John/xyz')
        f.assert_called_with('John', -1)

if __name__ == '__main__':
    unittest.main()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Python unittest 测试回调调用的正确方法是什么? 的相关文章

  • Python 中的哈希映射

    我想用Python实现HashMap 我想请求用户输入 根据他的输入 我从 HashMap 中检索一些信息 如果用户输入HashMap的某个键 我想检索相应的值 如何在 Python 中实现此功能 HashMap
  • 如何使用 opencv.omnidir 模块对鱼眼图像进行去扭曲

    我正在尝试使用全向模块 http docs opencv org trunk db dd2 namespacecv 1 1omnidir html用于对鱼眼图像进行扭曲处理Python 我正在尝试适应这一点C 教程 http docs op
  • karma/jasmine 控制台更详细的测试结果

    我使用 Karma 和 Jasmine 进行 javascript 单元测试 假设我有一个失败的测试 如下所示 expect objectA toEqual expectedObjectA 当失败时 我看到控制台上转储了两个对象 并显示一条
  • 模拟对象 - 将所有方法声明为虚拟方法还是使用接口?

    与 Java 不同 net 中的方法默认不是虚拟的 为了使用大多数模拟对象框架 您要么必须将要在模拟上使用的方法标记为 真实 对象上的虚拟方法 要么必须有一个可以模拟被测试类将使用的接口接受代替执行 将每个方法标记为虚拟似乎是一种不好的形式
  • 我可以在我的机器上同时安装 python 2.7 和 3.5 的tensorflow吗?

    目前我通过 Anaconda 在我的机器 MAC OX 上安装了 Python 2 7 Python 3 5 Tensorflow for Python 3 5 我也想在我的机器上安装 Tensorflow for Python 2 7 当
  • 使用字典映射数据帧索引

    为什么不df index map dict 工作就像df column name map dict 这是尝试使用index map的一个小例子 import pandas as pd df pd DataFrame one A 10 B 2
  • 如何使用 Pandas、Numpy 加速 Python 中的嵌套 for 循环逻辑?

    我想检查一下表的字段是否TestProject包含了Client端传入的参数 嵌套for循环很丑陋 有什么高效简单的方法来实现吗 非常感谢您的任何建议 def test parameter a list parameter b list g
  • datetime.datetime.now() 返回旧值

    我正在通过匹配日期查找 python 中的数据存储条目 我想要的是每天选择 今天 的条目 但由于某种原因 当我将代码上传到 gae 服务器时 它只能工作一天 第二天它仍然返回相同的值 例如当我上传代码并在 07 01 2014 执行它时 它
  • 使用 xlrd 打开 BytesIO (xlsx)

    我正在使用 Django 需要读取上传的 xlsx 文件的工作表和单元格 使用 xlrd 应该可以 但因为文件必须保留在内存中并且可能不会保存到我不知道如何继续的位置 本例中的起点是一个带有上传输入和提交按钮的网页 提交后 文件被捕获req
  • Python beautifulsoup 仅限 1 级文本

    我看过其他 beautifulsoup 得到相同级别类型的问题 看来我的有点不同 这是网站 我正试图拿到右边那张桌子 请注意表的第一行如何展开为该数据的详细细分 我不想要那个数据 我只想要最顶层的数据 您还可以看到其他行也可以展开 但在本例
  • Docker 中的 Python 日志记录

    我正在 Ubuntu Web 服务器上的 Docker 容器中测试运行 python 脚本 我正在尝试查找由 Python Logger 模块生成的日志文件 下面是我的Python脚本 import time import logging
  • 如何通过 TLS 1.2 运行 django runserver

    我正在本地 Mac OS X 机器上测试 Stripe 订单 我正在实现这段代码 stripe api key settings STRIPE SECRET order stripe Order create currency usd em
  • javascript 是否有等效的 __repr__ ?

    我最接近Python的东西repr这是 function User name password this name name this password password User prototype toString function r
  • 不同编程语言中的浮点数学

    我知道浮点数学充其量可能是丑陋的 但我想知道是否有人可以解释以下怪癖 在大多数编程语言中 我测试了 0 4 到 0 2 的加法会产生轻微的错误 而 0 4 0 1 0 1 则不会产生错误 两者计算不平等的原因是什么 在各自的编程语言中可以采
  • 仅第一个加载的 Django 站点有效

    我最近向 stackoverflow 提交了一个问题 标题为使用mod wsgi在apache上多次请求后Django无限加载 https stackoverflow com questions 71705909 django infini
  • 使用特定颜色和抖动在箱形图上绘制数据点

    我有一个plotly graph objects Box图 我显示了箱形 图中的所有点 我需要根据数据的属性为标记着色 如下所示 我还想抖动这些点 下面未显示 Using Box我可以绘制点并抖动它们 但我不认为我可以给它们着色 fig a
  • 如何在 Windows 命令行中使用参数运行 Python 脚本

    这是我的蟒蛇hello py script def hello a b print hello and that s your sum sum a b print sum import sys if name main hello sys
  • 如何解决 PDFBox 没有 unicode 映射错误?

    我有一个现有的 PDF 文件 我想使用 python 脚本将其转换为 Excel 文件 目前正在使用PDFBox 但是存在多个类似以下错误 org apache pdfbox pdmodel font PDType0Font toUnico
  • 将 Python 中的日期与日期时间进行比较

    所以我有一个日期列表 datetime date 2013 7 9 datetime date 2013 7 12 datetime date 2013 7 15 datetime date 2013 7 18 datetime date
  • 使用随机放置的 NaN 创建示例 numpy 数组

    出于测试目的 我想创建一个M by Nnumpy 数组与c随机放置的 NaN import numpy as np M 10 N 5 c 15 A np random randn M N A mask np nan 我在创建时遇到问题mas

随机推荐

  • 如何编写基于网络的音乐可视化工具?

    我正在尝试找到构建音乐可视化工具以在网络浏览器中运行的最佳方法 Unity 是一个选项 但我需要构建一个自定义音频导入 分析插件来获取最终用户的声音输出 Quartz 可以满足我的需要 但只能在 Mac Safari 上运行 WebGL 似
  • .net 与 Objective c SHA-512 不匹配

    我正在尝试编写用于从 net 函数在目标中创建 sha512 字符串的函数 该函数是 public static string GetSHA512 string strPlain UnicodeEncoding UE new Unicode
  • 在 Express REST API 中使用 OOP 的最佳方式?

    我将全力以赴并仅使用节点来做一个项目 这很有趣 但有时我会有点迷失其中 当我感到困惑时 我想尝试获得理解 这样我就可以正确地构建它 并且不会太不知所措 不管怎样 问题是这样的 我有使用 Express 和 mysql 的 REST API
  • Jackson Scala 模块的小例子?

    任何人都可以向我指出 Jackson 序列化 反序列化及其 2 10 的 Scala 模块的简单示例吗 我正在寻找基于反射的 JSON 不需要逐个字段注释或分配 这似乎可以做到这一点 但他们的文档不包含任何示例 如果我有一个案例类 case
  • 如何解压 .asar 文件?

    我使用以下命令打包了我的 Electron 应用程序 asar pack app app asar 现在 我需要解压它并取回整个代码 有什么办法可以做到吗 来自阿萨尔文档 https github com electron asar 指某东
  • 如何通过 Maven 使用 Netbeans 调试 Spring Boot

    经过很长时间的摆弄 直到我在 Netbeans 8 2 和 Spring Boot 1 4 3 中得到了正确的调试设置 我想我应该把我的发现写下来作为其他人的问答 问题是 Netbeans 的默认配置无法在调试模式下正确启动 Spring
  • Jetpack Compose:如何禁用浮动操作按钮?

    根据docs https developer android com reference kotlin androidx compose material package summary FloatingActionButton kotli
  • 检索与 Perl 中的所有正则表达式完全匹配的模式

    我有一个子图数据库 如下所示 t 3 231 1 v 0 94 v 1 14 v 2 16 v 3 17 u 0 1 2 u 0 2 2 u 0 3 2 t 3 232 1 v 0 14 v 1 94 v 2 19 v 3 91 u 0 1
  • 将不同日期范围内的相似对象分组以获取 SQL Server 中的最小和最大日期

    我有一张桌子 account onln status browse status beg date end date 123456789 On Y 1 1 2018 2 1 2018 123456789 On N 2 2 2018 4 1
  • 为什么这个分配的对象与原始对象共享相同的内存空间?

    在 python 中 我在使用 itertools groupby 模块时遇到了这种奇怪的现象 在Python中 变量赋值意味着将新变量分配给它自己的内存 而不是指向原始内存的指针 根据我的理解 如果这是不正确的 请告诉我 y 7 x y
  • 通过 WebApp 与本地 PC 交互

    我目前正在开发一个公司内部网应用程序 部分要求是让应用程序在用户本地 PC Minitab 上启动一个程序 然后让 Web 应用程序通过其 COM 接口与其进行通信 做这样的事情我有什么选择 一个签名的 Java 小程序和Jacob htt
  • 在 JavaScript 中计算两个数组的交集[重复]

    这个问题在这里已经有答案了 给定两个长度不等的数组 var arr1 mike sue tom kathy henry arr1 length 5 var arr2 howey jim sue jennifer kathy hank ale
  • 从jupyter服务器下载数据

    我通过连接到服务器来使用 ipython 笔记本 我不知道如何以编程方式将内容 例如数据框 csv 文件等 下载到我的本地计算机 因为我无法具体声明路径 如 C user 它将被下载到他们的机器而不是我的机器上 在其中一个笔记本的单独单元格
  • svelte 包应该是依赖项还是 devDependency?

    我知道已经有很多帖子讨论了两者之间的区别dependency and devDependency但我没有找到任何解释 svelte 情况的信息 所以让我们在这里打开这个 在大多数 svelte 包中 比如svelte 材质 ui https
  • 在 VS2012 上禁用 C++11 功能

    是否可以在 VS2012 上禁用 C 11 功能 我的代码还没有准备好 我不想引入进一步的混乱 从 Visual C 2015 Update 3 开始 现在可以为语言行为指定语言版本 显然它不仅仅影响一致性检查 https blogs ms
  • 我应该在 ejs 文件中使用脚本标签吗?

    我正在学习如何开发节点应用程序 这是一个人们可以发布城市周围发生的事件的应用程序 我有一个 ejs 文件 new ejs 它允许用户提交新事件 显然 有一个事件开始时间和结束时间 我想确保结束时间在开始时间之后 所以我简单地添加了一个脚本来
  • 如何从 Maven 的主文件夹访问测试类?

    我创建了一个具有标准文件夹结构的 Maven 项目 i n src main java src test java 等 我写了一个类ClassA和一个测试类TestA 在ClassA的主程序中 我引用了TestA的一个静态成员 代码可以编译
  • 设置数组所有值的最快方法?

    我有一个char 我想将每个索引的值设置为相同char value 有一个明显的方法可以做到这一点 迭代 char f char c new char 50 for int i 0 i lt c length i c i f 但我想知道是否
  • Xamarin.Forms Shell GoToAsync 在 iOS 中无法按预期工作

    我正在使用 Xamarin Forms Shell 功能 我需要从一个选项卡 根 导航到另一个选项卡 第二级 该示例有三个页面 为简单起见 我将其命名为 Page1 Page2 和 Page3 Page1 和 Page2 是 App She
  • 使用 Python unittest 测试回调调用的正确方法是什么?

    我有一个如下所示的应用程序代码 Filename app py class Foo def init self self callback None def set handler self callback self callback c