我正在尝试测试一个从以下位置获取输入的函数stdin
,我目前正在用这样的东西进行测试:
cat /usr/share/dict/words | ./spellchecker.py
以测试自动化的名义,有什么办法可以pyunit
可以伪造输入raw_input()
?
简短的回答是猴子补丁 http://en.wikipedia.org/wiki/Monkey_patch raw_input()
.
答案中有一些很好的例子如何在Python中显示重定向的stdin? https://stackoverflow.com/questions/5812333/how-to-display-the-redirected-stdin-in-python
这是一个简单的例子,使用lambda
它会丢弃提示并返回我们想要的内容。
被测系统
cat ./name_getter.py
#!/usr/bin/env python
class NameGetter(object):
def get_name(self):
self.name = raw_input('What is your name? ')
def greet(self):
print 'Hello, ', self.name, '!'
def run(self):
self.get_name()
self.greet()
if __name__ == '__main__':
ng = NameGetter()
ng.run()
$ echo Derek | ./name_getter.py
What is your name? Hello, Derek !
测试用例:
$ cat ./t_name_getter.py
#!/usr/bin/env python
import unittest
import name_getter
class TestNameGetter(unittest.TestCase):
def test_get_alice(self):
name_getter.raw_input = lambda _: 'Alice'
ng = name_getter.NameGetter()
ng.get_name()
self.assertEquals(ng.name, 'Alice')
def test_get_bob(self):
name_getter.raw_input = lambda _: 'Bob'
ng = name_getter.NameGetter()
ng.get_name()
self.assertEquals(ng.name, 'Bob')
if __name__ == '__main__':
unittest.main()
$ ./t_name_getter.py -v
test_get_alice (__main__.TestNameGetter) ... ok
test_get_bob (__main__.TestNameGetter) ... ok
----------------------------------------------------------------------
Ran 2 tests in 0.000s
OK
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)