让我们说我有一个login
方法正在游泳。它在很多地方使用,并节省了大量的重新输入代码。出于所有意图和目的,将此方法缩短是没有意义的。
使用异常处理编写否定测试是否合适?例如,如果我想确保已禁用的用户无法登录系统,那么编写类似的内容是否太尴尬:
begin
login(username, password)
fail
rescue Exception
page.should have_text('Sorry, your account is disabled!')
end
如果登录实际成功,则测试应该失败。如果我们到达异常,我们会发现错误消息和测试通过。
我想知道这是否太“聪明”而且可能引起混淆。在这里处理负面测试用例的最佳方法是什么?
答案 0 :(得分:1)
您将测试预期的行为,因此您的规格中不会有任何救援。在这种情况下,您可能希望在before
caluse中禁用该帐户,然后确保在您尝试执行操作(登录等)时引发异常。
测试通用Exception
的任何内容也是一个坏主意 - 您希望对预期的异常非常具体,因为不同的问题可能导致您的规范通过。
代码看起来像
expect { login(username, password) }.to raise_error LoginException