使用异常处理编写负面测试

时间:2015-07-23 20:03:34

标签: ruby selenium rspec capybara

让我们说我有一个login方法正在游泳。它在很多地方使用,并节省了大量的重新输入代码。出于所有意图和目的,将此方法缩短是没有意义的。

使用异常处理编写否定测试是否合适?例如,如果我想确保已禁用的用户无法登录系统,那么编写类似的内容是否太尴尬:

begin
  login(username, password)
  fail
rescue Exception
  page.should have_text('Sorry, your account is disabled!')
end

如果登录实际成功,则测试应该失败。如果我们到达异常,我们会发现错误消息和测试通过。

我想知道这是否太“聪明”而且可能引起混淆。在这里处理负面测试用例的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

您将测试预期的行为,因此您的规格中不会有任何救援。在这种情况下,您可能希望在before caluse中禁用该帐户,然后确保在您尝试执行操作(登录等)时引发异常。

测试通用Exception的任何内容也是一个坏主意 - 您希望对预期的异常非常具体,因为不同的问题可能导致您的规范通过。

代码看起来像

expect { login(username, password) }.to raise_error LoginException