设为首页 收藏本站
查看: 729|回复: 0

[经验分享] Learn Python The Hard Way学习(47)

[复制链接]

尚未签到

发表于 2017-5-6 12:50:44 | 显示全部楼层 |阅读模式
不断的输入命令去测试你游戏是很乏味的,为什么我们不写一些测试代码去测试程序呢?当你改变你的程序时,只要运行一下测试代码就能确保你的修改是否正确。当然,自动化测试不能测试出所有的错误,不过也可以为我们节约很多时间。



你要开始为你的代码写自动化测试程序了,这将会让你成为更好的程序员。




我不会尝试解释为什么你要写测试代码。我只是说,你要成为程序员,而编程是无聊而乏味的工作,测试软件也是无聊和乏味的,所以你要写一些自动化的测试代码去完成测试工作。




写测试代码能让你的大脑更加强壮,写测试代码能让你更加理解你写的代码的功能和原理,对细节的了解也会增加。




编写一个测试用例

我们来写一个简单的测试的例子,这个例子是基于项目骨架的新项目。




首先,从项目骨架创建一个ex47项目。确保重命名了NAME。




然后,创建一个文件ex47/game.py。代码如下:

class Room(object):

def __init__(self, name, description):
self.name = name
self.description = description
self.paths = {}

def go(self, direction):
return self.paths.get(direction, None)

def add_paths(self, paths):
self.paths.update(paths)






修改测试文件为:

from nose.tools import *
from ex47.game import Room


def test_room():
gold = Room("GoldRoom",
"""This room has gold in it you can grab. There's a
door to the north.""")
assert_equal(gold.name, "GoldRoom")
assert_equal(gold.paths, {})

def test_room_paths():
center = Room("Center", "Test room in the center.")
north = Room("North", "Test room in the north.")
south = Room("South", "Test room in the south.")

center.add_paths({'north': north, 'south': south})
assert_equal(center.go('north'), north)
assert_equal(center.go('south'), south)
def test_map():
start = Room("Start", "You can go west and down a hole.")
west = Room("Trees", "There are trees here, you can go east.")
down = Room("Dungeon", "It's dark down here, you can go up.")

start.add_paths({'west': west, 'down': down})
west.add_paths({'east': start})
down.add_paths({'up': start})

assert_equal(start.go('west'), west)
assert_equal(start.go('west').go('east'), start)
assert_equal(start.go('down').go('up'), start)








这个文件从ex47.game模块中导入Room类,以便你可以测试它。测试函数以test_开始,这里测试了创建房间,保存房间。




最重要的函数是assert_equal,它能够比较你给出的变量,如果你的函数返回错误的结果,nosetests就会打印错误信息。




测试规则


  • 把测试代码放到tests文件夹下,命名是BLAH_tests.py。不然nosetests不能运行它们。
  • 为每一个模块写一个测试文件。
  • 保持测试用例简洁,如果不简洁也不用担心,一般测试用例都比较乱。
  • 经过测试用例会比较乱,但是还是要尽量保持简洁,删除重复的代码,最好写一个函数来解决代码重复问题,就这样做吧,以后你会感激我的。
  • 最后,不要太依赖测试。有时候,最好的办法是重新设计。

运行结果



root@he-desktop:~/python/projects/ex47# nosetests

...

----------------------------------------------------------------------

Ran 3 tests in 0.019s




OK



试着弄点错误进去,看看会给出什么提示 。




加分习题

1. 学习关于nosetests的知识,或者学习其他可选择的测试方法。

2. 学习doc tests,看看你是否喜欢这种测试方式。

3. 改进Room类,这次要边写代码,边写测试用例。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-373834-1-1.html 上篇帖子: Python单例模式的4种实现方法 下篇帖子: 二维、调用-Python和数据结构学习 -by小雨
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表