aqu*_*tae 5 python unit-testing patch mocking
我有一个测试套件(使用nose,而不是unittest),我想修补一个函数,为测试类中的每个测试返回一个特定的值序列.我使用简化示例进行的第一次尝试是:
@patch('time.clock', MagicMock(side_effects=[1, 2]))
class Tests:
def test_1(self):
assert time.clock() == 1
assert time.clock() == 2
def test_2(self):
assert time.clock() == 1
assert time.clock() == 2
Run Code Online (Sandbox Code Playgroud)
但是,MagicMock实例仅创建一次,因此当副作用用尽时,第二次测试失败.我可以单独修补每个测试方法,但我真的不想在所有测试方法上复制修补程序装饰器(测试中的测试比这个例子多得多!)我能做的另一种方法是创建补丁像这样的设置代码:
class Tests:
def setup(self):
self.old_clock = time.clock
time.clock = MagicMock(side_effects=[1, 2])
def teardown(self):
time.clock = self.old_clock
def test_1(self):
assert time.clock() == 1
assert time.clock() == 2
def test_2(self):
assert time.clock() == 1
assert time.clock() == 2
Run Code Online (Sandbox Code Playgroud)
但保存和恢复原始函数定义似乎是Mock应该能够自动执行的操作.有没有另外一种方法可以解决这个问题?或者我的最后一个例子是这样做的最佳方式?
a = (x for x in [1,2])
x = lambda : next(a)
x()
Run Code Online (Sandbox Code Playgroud)
输出:1
x()
Run Code Online (Sandbox Code Playgroud)
输出:2
将您的答案放入 a 的列表中。将 X 更改为您想要的名称。
| 归档时间: |
|
| 查看次数: |
1012 次 |
| 最近记录: |