BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

矩阵化你的Rails功能测试

| 作者 Sebastien Auvray 关注 0 他的粉丝 ,译者 霍泰稳 关注 1 他的粉丝 发布于 2007年4月24日. 估计阅读时间: 4 分钟 | ArchSummit北京2018 共同探讨机器学习、信息安全、微服务治理的关键点
在他最近发布的测试工具ZenTest 3.5.0版本里,Dyan Davis增加了一个新的方法以应对多案例(Case)测试的情况。他建议的方法是使用矩阵。想像一下在你的应用中要同时测试几个属性(带有直交状态的:可读VS.不可读……)。基本上你会采取下面四个方法:

def test_edit_user_readable
    some_setup_to_initialize_user_readable_context
    some_action_here_edit
    some_assertion_error_read
end

def test_edit_user_writable
    some_setup_to_initialize_user_writable_context
    some_action_here_edit
    some_assertion_edit
end

def test_view_user_readable
    some_setup_to_initialize_user_readable_context
    some_action_here_view
    some_other_assertion_view
end

def test_view_user_writable
    some_setup_to_initialize_user_writable_context
    some_action_here_view
    some_other_assertion_view
end

这儿很容易就可以看出其中有些代码能被提取或者分解出来。但是Ryan做的更彻底,他把代码组织成一个矩阵,列首代表不同的Setup案例,行首代表要做的Action,交集定义给定的Action和Setup上下文的期望结果。

4个测试案例(Case)如下面所示:
setups :user_readable,:user_writable
matrix:edit,:error_read,:edit
matrix:view,:view,:view

ZenTest通过Setup方法保存案例,matrix方法为每一个应用结果创建一个测试方法:

def test_#{action}_#{setup}
    matrix_setup_configuration #{setup}.split(//) # global setup
    matrix_setup_#{action} #{setup}, #{expected} # action setup + execution
    matrix_test_#{expected}, #{setup} # expected verification
end

所以最后,Setup配置会在一个地方被提取出来,容纳不同案例中的参数。Action和Assertion(断言)也被分开。

Ryan Davis给出了一个矩阵化前后测试案例的可视化例子:

点击图片查看详细代码
测试矩阵模型是DRY(Don't Repeat Yourself,不重复自己)流程哲学的又一个示范。这种用法的好处是使非开发人员较容易地理解代码成为可能,而且要增加测试的话,只需要修改矩阵就可以了。

查看英文原文:Matrix Your Rails Functional Tests 

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT