使用异常处理编写否定测试
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
假设我有一个运行顺畅的 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