python 可以处理 assertRaises
Can python behave handle assertRaises
我开始使用 Behave 来实施一些测试。我想替换我现有的一些单元测试(更多功能测试)。其中一些使用 assertRaises 来检查对后端服务的某些调用是否引发了它们应该引发的错误。是否有可能在 Behave(或者 Gherkin)中有类似的东西?
以下单元测试调用我的后端服务,作为访客登录,无法执行管理任务 (do_admin_task)。它应该引发异常。
def test_mycall(self):
service = myservice('guest', 'pwd')
self.assertRaises(NoPermission, service.do_admin_task, some_param)
在我的功能文件中,我将如何创建我的场景?像这样?
scenario: test guest can't do an admin task
given I log on to my service as guest / pwd
when I try to perform my admin task
then it should fail saying NoPermission
我相信这会在 when 步骤中引发异常,因此甚至不会进入 then 步骤。
我能想到的解决此问题的一种可能方法是创建一个特定步骤来执行这两个步骤并进行异常处理。但是,如果我想在较低级别的调用中模拟错误,那么我将不得不重写其中的许多步骤,这正是我希望通过首先切换到 Behave 来避免的。
我该如何处理?
在考虑 Gherkin 级别时,异常是 when 步骤的预期结果。所以步骤定义应该有一个 try 块并将 result/exception 存储在上下文中。 then步骤可以检查这个result/exception then.
@When(u'I try to perform my admin task')
def step_impl(context):
try:
context.admintaskresult = myservice(context.user, context.pass)
context.admintaskexception = None
except Exception as ex:
context.admintaskresult = None
context.admintaskexception = ex
@Then(u'it should fail saying NoPermission')
def step_impl(context):
assert isinstance(context.admintaskexception, NoPermissionException)
我开始使用 Behave 来实施一些测试。我想替换我现有的一些单元测试(更多功能测试)。其中一些使用 assertRaises 来检查对后端服务的某些调用是否引发了它们应该引发的错误。是否有可能在 Behave(或者 Gherkin)中有类似的东西?
以下单元测试调用我的后端服务,作为访客登录,无法执行管理任务 (do_admin_task)。它应该引发异常。
def test_mycall(self):
service = myservice('guest', 'pwd')
self.assertRaises(NoPermission, service.do_admin_task, some_param)
在我的功能文件中,我将如何创建我的场景?像这样?
scenario: test guest can't do an admin task
given I log on to my service as guest / pwd
when I try to perform my admin task
then it should fail saying NoPermission
我相信这会在 when 步骤中引发异常,因此甚至不会进入 then 步骤。
我能想到的解决此问题的一种可能方法是创建一个特定步骤来执行这两个步骤并进行异常处理。但是,如果我想在较低级别的调用中模拟错误,那么我将不得不重写其中的许多步骤,这正是我希望通过首先切换到 Behave 来避免的。
我该如何处理?
在考虑 Gherkin 级别时,异常是 when 步骤的预期结果。所以步骤定义应该有一个 try 块并将 result/exception 存储在上下文中。 then步骤可以检查这个result/exception then.
@When(u'I try to perform my admin task')
def step_impl(context):
try:
context.admintaskresult = myservice(context.user, context.pass)
context.admintaskexception = None
except Exception as ex:
context.admintaskresult = None
context.admintaskexception = ex
@Then(u'it should fail saying NoPermission')
def step_impl(context):
assert isinstance(context.admintaskexception, NoPermissionException)