当前位置: 首页 > 面试题库 >

如何模拟pyunit的stdin输入?

高锦
2023-03-14
问题内容

我正在尝试测试从中获取输入的函数stdin,而我目前正在使用类似以下内容进行测试:

cat /usr/share/dict/words | ./spellchecker.py

以测试自动化的名义,有什么方法pyunit可以伪造输入raw_input()


问题答案:

简短的答案是猴子补丁 raw_input()

这是一个使用a的简单示例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


 类似资料:
  • 我想从STDIN读取输入。我在C中使用fork()方法。我有子进程和父进程。我的输入是多行的。父进程只等待子进程终止,子进程只读取第一行,子进程终止后,父进程继续读取。我想要打印行。例如;输入-> null 子进程打印“星期一”,父进程打印“星期二”和“星期三”。一旦到达文件结尾,程序就会终止。 ./program

  • Python单元测试框架(The Python unit testing framework),简称为PyUnit, 是Kent Beck和Erich Gamma这两位聪明的家伙所设计的 JUnit 的Python版本。 而JUnit又是Kent设计的Smalltalk测试框架的Java版本。它们都是各自语言的标准测试框架。

  • PyUnit是Python版JUnit,一款Python单元测试框架。 PyUnit可以在Python 1.5.2及更高版本上运行。作者已经在Linux(Redhat 6.0和6.1以及Debian Potato)和Python 1.5.2, 2.0和2.1上对PyUnit 进行了测试。而且PyUnit已知可以在其它操作系统平台上工作,如Windows和Mac。 如需了解在JPython和Jyth

  • 我们已经见过好几个示例使用 stdin 了。这也应该是 logstash 里最简单和基础的插件了。 所以,在这段中,我们可以学到一些未来每个插件都会有的一些方法。 配置示例 input { stdin { add_field => {"key" => "value"} codec => "plain" tags => ["add"]

  • 问题内容: 模块包括在其顶部。然而在试验条件下,我想嘲笑 的(模拟)和进口完全避免。 实际上,并不是故意在测试环境中安装的。 是被测单元。我必须导入所有功能。是我需要模拟的模块。但我怎么能嘲笑之内,并停止从导入实际,如果第一件事情确实是进口? (未安装B的原因是我使用pypy进行了快速测试,但不幸的是B尚未与pypy兼容。) 怎么办呢? 问题答案: 您可以在导入之前分配给以获取所需的内容: tes

  • CacheController.Somemethod();但是当submit方法被称为submit方法时,它会创建一个线程和cacheController.somemethod();从不调用测试类。