是否可以用unittest.mock在Python3.5中?在
# file my_function.py
import os
my_function():
# do something with os, e.g call os.listdir
return os.listdir(os.getcwd())
# file test_my_function.py
test_my_function():
os = MagickMock()
os.listdir = MagickMock(side_effect=["a", "b"])
self.assertEqual("a", my_function())
我以为操作系统列表目录方法在第一次调用时返回指定的副作用“a”,但在我的函数内部未修补操作系统列表目录被称为。在
^{} 有两个主要职责:
Mock
objects:设计用于跟踪您的剧本并记录对模拟对象的每次访问的对象在您的例子中,您需要这两个功能:修补生产代码中由mock使用的} 的方法有很多种,details to take care on how use it和{a4}。在
os.listdir
引用,您可以完全控制它将响应。使用^{在您的例子中,您需要测试}。此外,您需要的是控制
my_function()
行为,并且需要同时修补os.listdir()
和{return_value
(请参阅针对return_value
和side_effect
差异的文档)。在我稍微改写了一下你的例子,使其更加完整和清晰:
^{1}$我使用decorator语法是因为我认为这是一种更简洁的方法;此外,为了避免引入太多的细节,我没有使用autospecing 我认为这是一个非常好的做法。在
最后一点:mocking是一个强大的工具,但是使用它而不是滥用它,补丁只是你需要修补而不是更多。在
相关问题 更多 >
编程相关推荐