我正在构建一个设备对象以在 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
尽管 mock
是 unittest
包的一部分,但它实际上是无关的并且可以与任何测试框架一起使用。
对于 Python < 3.3,您可以使用 mock
package from PyPI .
关于python - 在 Nose 中伪造 time.time() 的时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35783760/