我正在构建一系列测试,并发现其中一些测试在一起运行时都会失败。看看它们为什么会破坏我发现它是因为我们记住了一些系统调用以进行设置。
因为我嘲笑系统调用而不是memoized,所以函数只计算一次,因此它会将该信息泄漏到后续测试中。
处理记忆功能的优雅方法是什么:
还有其他想法吗?
由于
答案 0 :(得分:0)
也许为时已晚,但我发现使用delete_memoized
很容易:
# your function
@memoize(timeout=50)
def your_long_function():
# do stuff
# your test
def test_get_folder_content_error_handled(self, flf):
delete_memoized(your_long_function)
your_long_function()
我刚刚在Django中使用了这个解决方案(使用django-memoize),它就像一个魅力!
答案 1 :(得分:0)
尝试使用MagicMock
代替vanilla Mock
。
说你的代码是这样的:
@memoize.Memoize()
def OAuthClient():
"""Returns an Oauth client."""
return 'blah'
像Mock
这样嘲笑:
mymodule.OauthPasswordClient = mock.Mock()
返回如下错误:
TypeError: unsupported operand type(s) for +=: 'int' and 'Mock'
但是像MagicMock
那样嘲笑:
mymodule.OauthPasswordClient = mock.MagicMock()
工作得很好。
答案 2 :(得分:-1)
我认为第一种选择可能是最好的。