等式检验的近似

roughl的Python项目详细描述


https://img.shields.io/travis/numberoverzero/roughly/master.svg?style=flat-squarehttps://img.shields.io/coveralls/numberoverzero/roughly/master.svg?style=flat-squarehttps://img.shields.io/pypi/v/roughly.svg?style=flat-squarehttps://img.shields.io/pypi/status/roughly.svg?style=flat-squarehttps://img.shields.io/github/issues-raw/numberoverzero/roughly.svg?style=flat-squarehttps://img.shields.io/pypi/l/roughly.svg?style=flat-square 简单的近似相等性测试的重载值

安装

pip install roughly

用法

测试返回arrow.now()的函数通常如下所示:

import arrow


def function_under_test():
    return arrow.now()


def test_function_returns_now():
    now = arrow.now()
    actual = function_under_test()
    assert now.replace(seconds=-2) <= actual <= now.replace(seconds=2)

如果要检查两个具有datetime字段的对象,情况会更糟 这应该是大致相等的,但是你仍然想要这个班级的 __eq__检查完全相等。有更好的方法:

import arrow
import roughly


def test_function_returns_now():
    now = roughly.near(arrow.now(), seconds=2)
    assert function_under_test() == now

动机

应严格处理近似平等。你可以引入微妙的 当两个日期接近系统的一部分,但不接近时出错 另一个。

在测试中最常见的,但是,我们真的希望使用现有的。 对具有datetime属性且没有 修补提供日期时间的系统。

考虑一个将对象存储在模拟数据库中、更新项的测试 以当前时间。我们真的很想使用 unittest.mock类似于assert_called_once_with,但这需要我们使用 精确值。我们需要看起来与另一个等价的东西 系统。

如果不粗略地说,这是确保约会在附近的解决方法。请注意 所有其他参数都可以通过mock的assert调用进行检查:

assert engine.save.call_count == 1
(item, *_), kwargs = engine.save.call_args
assert item is key
assert kwargs["atomic"] is True

# :( One of the the fields in this object is a datetime, so we can't
# do an exact match.  We could mock arrow.now() but that's really an
# implementation detail that we shouldn't need to know.
condition = Key.until >= arrow.now().replace(seconds=-10)
assert kwargs["condition"].column is condition.column
assert kwargs["condition"].value >= condition.value

这是完全相同的检查,但是对于 条件(正在测试的条件是bloop conditionalexpression):

condition = Key.until >= near(arrow.now(), seconds=5)
engine.save.assert_called_once_with(key, atomic=True, condition=condition)

对象的近似部分被注入到我们所期望的参数中, 当unittest.mock机器执行比较时 self._call_matcher((args, kwargs)) == self._call_matcher(self.call_args) 并遍历(args, kwargs)元组,它将比较 条件对象与我们的近似日期时间的实际条件 实时。在类的__eq__中,它将检查 self.value == other.value用于我们的ApproximateArrow比较 到实际的Arrow

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
带有抽象方法的JavaGroovy模拟   java黄瓜任务   没有同步或易失性的java内存可见性   java何时使用合适版本的singleton threadsafe实现?   java将包装器类转换为Xtend中的原语   java如何从父帧关闭所有子帧?   java如何将图像上载到SQLite数据库?   java如何更改JTable的空白颜色?   java Android在OpenGLES中通过glBlendFunc混合获得正确的不透明度/颜色   多线程在Java中同步共享静态对象的正确方法是什么?   Java中类似apache commons的谓词。它存在吗?   安卓中文本视图中的java过滤文本   java Room数据库迁移冻结屏幕   jar Java使用xjc生成的类不会生成默认的无参数构造函数   java Android包含自定义组件,导致其隐藏在主视图后面   java Gradle脚本忽略TestNG xml文件   java无法安装maven,系统无法识别“mvn”命令行   如何通过java中的post将信息发送到php页面?   java Android HTTPUrlConnection响应返回垃圾   如何确保我的Java程序不使用Oracle JVM?