我开始使用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/