我正在测试一个具有多个外部依赖项的应用程序,我使用MonkeyPatching技术通过自定义实现来帮助我的测试修补外部库的功能。它按预期工作。
但我现在遇到的问题是,这使得我的测试文件非常混乱。我有几个测试,每个测试都需要自己实现补丁函数。
例如,假设我有一个来自外部库的get函数,
test_a()
需要
GET()
以使其返回错误和
test_b()
需要
获取()
以使它返回真。
处理这种情况的首选方法是什么?目前我做以下工作:
def test_a(monkeypatch):
my_patcher(monkeypatch, patch_get_to_return_true = True, patch_get_to_return_false = False, patch_get_to_raise_exception = False)
def test_b(monkeypatch)
my_patcher(monkeypatch, patch_get_to_return_true = True, patch_get_to_return_false = False, patch_get_to_raise_exception = False)
def test_c(monkeypatch)
my_patcher(monkeypatch, patch_get_to_return_true = False, patch_get_to_return_false = False, patch_get_to_raise_exception = True)
def my_patcher(monkeypatch, patch_get_to_return_true = False, patch_get_to_return_false = False, patch_get_to_raise_exception = False):
def patch_func_pos():
return True
patch_func_neg():
return False
patch_func_exception():
raise my_exception
if patch_get_to_return_true:
monkeypatch.setattr(ExternalLib, 'GET', patch_func_pos)
if patch_get_to_return_false:
monkeypatch.setattr(ExternalLib, 'GET', patch_func_neg)
if patch_get_to_raise_exception:
monkeypatch.setattr(ExternalLib, 'GET', patch_func_exception)
上面的示例只有三个测试可以修补一个函数。我的实际测试文件有大约20个测试,每个测试将进一步修补几个功能。
有人能给我建议一个更好的处理方法吗?建议将MonkeyPatching部件移动到单独的文件中吗?