使用异常处理编写否定测试

Writing a negative test by using exception handling

假设我有一个运行顺畅的 login 方法。它被用在很多地方,并节省了大量重新输入的代码行。出于所有意图和目的,缩短此方法没有任何意义。

用异常处理来写负测试合适吗?例如,如果我想确保禁用用户无法登录系统,这样写是不是太尴尬了:

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

如果登录确实成功,则测试应该失败。如果我们遇到异常,我们会找到错误消息并且测试通过。

我想知道这是否太过 "clever" 并且可能会造成混淆。此处处理负面测试用例的最佳方式是什么?

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

测试通用的任何东西 Exception 也是一个坏主意 - 您想要非常具体地说明预期的异常,因为不同的问题可能会导致您的规范通过。

代码看起来像

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