python - 在 Nose 中伪造 time.time() 的时间戳

标签 python unit-testing timestamp nose

我正在构建一个设备对象以在 python 中从连接的设备轮询数据,我正在尝试使用 nose 测试该对象的内部工作及其所有功能。我在使用 time.time() 编写时间戳时遇到了一个问题,因为每次调用函数时结果值都不同,这严重搞砸了一些测试,例如这个数据采集功能:

def getData(self, data):
    if type(data) is not type({}):
        #print "Bad Type!"
        raise TypeError
    else:
        #print "Good Type!"
        self.outD = {}
        datastr = ""
        for key, value in data.iteritems():
            self.outD[key] = value
        self.outD["timestamp"] = time.time()
        self.outD["id"] = self.id
        self._writeCSV()

当我测试这个函数的输出并比较生成的 CSV 文件时,由于时间戳,它总是失败。我可以通过添加测试标志在我的设备对象中将它分出,但我想知道 nose 是否有内置的方法来处理这样的问题,其中函数的结果可以用给定值或本地函数替换来伪造time.time() 调用。这可能吗?

最佳答案

您可以使用 unittest.mock .示例:

import time
from unittest import mock

@mock.patch('time.time', mock.MagicMock(return_value=12345))
def test_something():
    assert time.time() == 12345

产生以下输出:

$ nosetests3 -v
test.test_something ... ok

----------------------------------------------------------------------
Ran 1 test in 0.006s

OK

尽管 mockunittest 包的一部分,但它实际上是无关的并且可以与任何测试框架一起使用。

对于 Python < 3.3,您可以使用 mock package from PyPI .

关于python - 在 Nose 中伪造 time.time() 的时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35783760/

相关文章:

python - Beautifulsoup,达到最大递归深度

python - (8)Exec格式错误: exec of ' ' failed - CentOS

javascript - 如何在js中从时间戳数组中匹配并获取日期

python - Jedi-vim 自动只插入匹配的选项(需要禁用它)

python - 如何捕获 python 中的非 fatal error

unit-testing - CakePHP单元测试无法识别固定装置

unit-testing - 如何模拟最终领域? mockito/powermock

reactjs - 如何在创建 react 应用程序提交之前运行测试?

php - 无法将正确的时间记录到数据库中

php - 使用 SQL 将 UTC 时间戳转换为 EST 日期和时间