Python单元测试代码,调用OS / Module级python函数
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python单元测试代码,调用OS / Module级python函数,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1696字,纯文字阅读大概需要3分钟。
内容图文
我有一个python模块/脚本,它可以完成其中的一些操作
>在脚本内的各种嵌套级别,我接受命令行输入,验证它们,应用合理的默认值
>我还检查是否存在一些目录
以上只是两个例子.我试图找出测试这个的最佳“策略”.我所做的是我已经在我的模块中围绕raw_input和os.path.exists构建了包装器函数,然后在我的测试中我覆盖这两个函数来从我的数组列表中获取输入或者做一些模拟行为.该方法具有以下缺点
> Wrapper函数只是为了测试而存在,这会污染代码
>我必须记住每次在代码中使用包装器函数,而不仅仅是调用os.path.exists或raw_input
有什么好的建议?
解决方法:
简短的回答是monkey patch这些系统调用.
在How to display the redirected stdin in Python?的答案中有一些很好的例子
这是raw_input()的一个简单示例,它使用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
内容总结
以上是互联网集市为您收集整理的Python单元测试代码,调用OS / Module级python函数全部内容,希望文章能够帮你解决Python单元测试代码,调用OS / Module级python函数所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。