Johnnysweb 可以满足您的需要,但您可以导入和使用mock ,而不是自己滚动。Mock 是专门为单元测试而设计的,它让你想要做的事情变得非常简单。它内置于 Python 3.3。
例如,如果要运行替换 os.path.isfile 并始终返回 True 的单元测试:
try:
from unittest.mock import patch
except ImportError:
from mock import patch
class SomeTest(TestCase):
def test_blah():
with patch("os.path.isfile", lambda x: True):
self.assertTrue(some_function("input"))
这可以为您节省大量样板代码,而且可读性很强。
如果你需要一些更复杂的东西,例如,替换 supbroccess.check_output,你可以创建一个简单的辅助函数:
def _my_monkeypatch_function(li):
x,y = li[0], li[1]
if x == "Reavers":
return "Gorram"
if x == "Inora":
return "Shiny!"
if x == y:
return "The Ballad of Jayne"
def test_monkey():
with patch("subprocess.check_output", _my_monkeypatch_function):
assertEquals(subprocess.check_output(["Mudder","Mudder"]),
"The Ballad of Jayne")