矩阵化你的Rails功能测试

在他最近发布的测试工具 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给出了一个 矩阵化前后测试案例的可视化例子:

点击图片查看详细代码

你可能感兴趣的:(矩阵化你的Rails功能测试)