我正在尝试测试从中获取输入的函数stdin,而我目前正在使用类似以下内容进行测试:
stdin
cat /usr/share/dict/words | ./spellchecker.py
以测试自动化的名义,有什么方法pyunit可以伪造输入raw_input()?
pyunit
raw_input()
简短的答案是猴子补丁 raw_input()。
这是一个使用a的简单示例lambda,该示例丢弃提示并返回我们想要的内容。
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