我正在尝试找出最佳方法来模拟在我正在测试的代码执行过程中在非常具体的点上发生的不良事件,以确保应该从"糟糕的事情中恢复的代码&# 34;实际上按预期工作。
在我的特定情况下,我想模拟用户对各种文件进行有害的更改,但实际上任何你想到的任意例子都适用。
我能想到的最简单的方法就是调用一个空的“存根”方法,这个方法在生产中根本不做任何事情,但是我会在测试过程中用一个补丁来模拟它来完成实际的工作。让坏事发生。在我的示例中,补丁将重命名或删除脚本正在操作的文件。
考虑以下Python中的通用示例,但可以使用您喜欢的任何语言编写:
script.py
:
def simulate_bad_thing_during_testing():
# This is an intentionally empty stub to be mocked out during testing.
pass
def main():
# Do some work.
...
simulate_bad_thing_during_testing()
# Do some more work, even if bad thing has happened.
...
test_script.py
:
def do_bad_thing():
# Do the bad thing here.
...
@mock.patch('simulate_bad_thing_during_testing', side_effect=do_bad_thing)
def test_main_recovers_from_bad_thing():
main()
# assert all was well and the script recovered from the bad thing.
...
这种做法是否常见?我一直试图在网上找到这样的例子并且失败了。
如果其他人以前做过,那么它叫什么?如果我有一个更好的术语,也许我的谷歌会更好。我发现了#34;变异"测试和"模糊"测试,但这两个术语似乎都表示不同的东西。
有没有更好的方法来模拟被测代码中特定点的任意最坏情况?也许一个不会引起队友眉毛的人,想知道为什么我选择了这样一个"入侵"这样做的方式。我觉得我的函数的实现和覆盖函数的测试之间的这种紧密耦合有点不舒服,但我怎么能" hook"以这种方式进入一个特定的界限?