pku*_*mar 5 python unit-testing
我写了一个函数,在调用时打开一个带有给定文件名的vim编辑器.如何进行这些类型操作的单元测试....
要对这样的东西进行单元测试,你必须模拟/删除你的依赖项.在这种情况下,假设您通过调用os.system("vim")启动vim.
在您的单元测试中,您可以将该函数调用存根,例如:
def launchVim():
os.system("vim")
def testThatVimIsLaunched():
try:
realSystem = os.system
called = []
def stubSystem(command):
if command == "vim":
called.append(True)
os.system = stubSystem
launchVim() # function under test
assert(called == [True])
finally:
os.system = realSystem
Run Code Online (Sandbox Code Playgroud)
有关模拟和存根的更多详细信息,请查看本文
更新:我添加了try/finally以恢复Dave Kirby建议的原始系统功能
这不再是单元测试,而是集成测试。为什么需要启动 vim?通常,您会“模拟”它,模拟进程生成,并依赖于 python 的子进程模块经过良好测试的事实。
例如,要在代码中实现此目的,您可以对实现您的功能的类进行子类化,并重写负责生成的方法。然后测试这个子类。IE
class VimSpawner(object): # your actual code, to be tested
...
def spawn(self):
... do subprocess magic
def other_logic(self):
...
self.spawn()
class TestableVimSpawner(VimSpawner):
def spawn(self):
... mock the spawning
self.ididit = True
class Test(..):
def test_spawning(self):
t = TestableVimSpawner()
t.other_logic()
self.failUnless(t.ididit)
Run Code Online (Sandbox Code Playgroud)