2

我开始使用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 来避免的。

我应该如何处理这个?

4

1 回答 1

1

在考虑 Gherkin 级别时,异常是when步骤的预期结果。所以步骤定义应该有一个 try 块并将结果/异常存储在上下文中。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)
于 2016-04-13T11:01:25.283 回答