gpt4 book ai didi

python - 在 Python 行为测试框架中处理异常

转载 作者:太空狗 更新时间:2023-10-29 20:51:47 25 4
gpt4 key购买 nike

我一直在考虑从 nose 切换到 behave 进行测试(mocha/chai 等把我宠坏了)。到目前为止一切顺利,但我似乎想不出任何测试异常的方法:

@then("It throws a KeyError exception")
def step_impl(context):
try:
konfigure.load_env_mapping("baz", context.configs)
except KeyError, e:
assert (e.message == "No baz configuration found")

有了 Nose ,我可以用

注释测试
@raises(KeyError)

我在 behave 中找不到这样的东西(不在源代码中,不在示例中,不在此处)。如果能够在场景大纲中指定可能抛出的异常,那就太好了。

有人走过这条路吗?

最佳答案

我自己对 BDD 还很陌生,但一般来说,我的想法是测试记录客户可以期望的行为 - 而不是步骤实现。所以我希望测试这个的规范方法是这样的:

When I try to load config baz
Then it throws a KeyError with message "No baz configuration found"

步骤定义如下:

@when('...')
def step(context):
try:
# do some loading here
context.exc = None
except Exception, e:
context.exc = e

@then('it throws a {type} with message "{msg}"')
def step(context, type, msg):
assert isinstance(context.exc, eval(type)), "Invalid exception - expected " + type
assert context.exc.message == msg, "Invalid message - expected " + msg

如果这是一个常见的模式,您可以编写自己的装饰器:

def catch_all(func):
def wrapper(context, *args, **kwargs):
try:
func(context, *args, **kwargs)
context.exc = None
except Exception, e:
context.exc = e

return wrapper

@when('... ...')
@catch_all
def step(context):
# do some loading here - same as before

关于python - 在 Python 行为测试框架中处理异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27894993/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com