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)