在python arround memoized函数中测试

时间:2014-09-08 10:43:54

标签: python testing

我正在构建一系列测试,并发现其中一些测试在一起运行时都会失败。看看它们为什么会破坏我发现它是因为我们记住了一些系统调用以进行设置。

因为我嘲笑系统调用而不是memoized,所以函数只计算一次,因此它会将该信息泄漏到后续测试中。

处理记忆功能的优雅方法是什么:

  • 模仿那些而不是系统调用
  • 在memoize上创建一个参数,使其不适用于测试
  • 模拟memoize装饰器以返回参数
  • 查找数据的记忆位置并在每次测试结束时进行清理

还有其他想法吗?

由于

3 个答案:

答案 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)

我认为第一种选择可能是最好的。

  • 模仿那些而不是系统调用