python - python可以处理assertRaises吗

标签 python python-behave

我开始使用Behave来实现一些测试。我想替换一些现有的单元测试(更多功能测试)。其中一些使用assertRaises来检查对后端服务的某些调用是否引发了它们应该引发的错误。行为(或者更确切地说是小 cucumber )中是否有可能有类似的东西?

以下单元测试调用我的后端服务,并且作为访客登录,无法执行管理任务(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 block 并将结果/异常存储在上下文中。 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)

关于python - python可以处理assertRaises吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36585400/

相关文章:

python - 识别列表中的所有重叠元组

python - 如何在行为 (BDD) 中查看 print() 语句

python - 如何将变量从 for 循环传递到 pandas.df.apply 中的 kwargs?

python - 优化Python中二叉树的查找直径

python - 为什么日志记录在 python 中以这种方式运行

python - 如何将等待/ sleep 装饰器添加到步骤函数(行为)?

比较两个列表并打印不匹配项的 Pythonic 方法?

python-behave - BDD(行为)中的场景可以没有 'Given' 吗?

python - 行为测试的模块化结构