【发布时间】:2015-09-02 22:00:39
【问题描述】:
编辑:正如我在下面回答的那样,这个问题是无效的,因为这完全是我的误解。
我为自定义错误制作了一个 try-except 装饰器,我想在我的单元测试中应用这个装饰器。但是,当完成并且在装饰单元测试范围内有 raise SomeError 语句(如果不满足某些特定测试要求,从测试用例调用的函数将抛出 SomeError),并且此错误类是陷入我的装饰器,然后测试永远不会执行。但是,如果我在测试用例中删除任何 raise SomeError 语句,它运行良好。
我的装饰师:
def try_exceptor(f):
@functools.wraps(f)
def inner(self):
try:
return f(self)
except KeyError as k:
print k
except MyLocustFailError as mlfe:
print mlfe.message
newer_assert(mlfe.load_test, mlfe.response, mlfe.message)
return inner
【问题讨论】:
-
你到底想用这个做什么?当测试抛出
KeyError时,你想发生什么?你想自己重写unittest.TestCase.assertRaises吗? -
KeyError 只是为了解决我的问题中描述的行为而添加的。我正在将要与 Python unittest 和 Locust 负载测试模块一起使用的测试源(测试用例函数)结合起来。装饰器允许我将每个测试用例中的 try-except 语句移动到一个装饰器中。
-
对不起,我还是不明白。为什么在测试用例中使用 try-except ?相同的代码抛出异常或不抛出异常真的是正确的吗?也许您需要举一个更具体的例子?
assertRaises()怎么没有给你想要的功能? -
Locust 负载测试模块有它自己的方法来设置测试用例失败(必须说我不是 Locust 专家,所以这个解决方案是我现在想出的)。因此,如果我想在 Locust 运行期间设置失败状态并终止执行,我会抛出我的自定义错误。还应该说,执行总是作为单元测试(使用单元测试模块)或作为蝗虫测试。如果不涉及 Locust 模块,我将永远不会使用装饰器和 tr-except 的这种方法..
-
Dan Getz,感谢您的意见,但正如您在我的回答中看到的那样,问题是我的误解。
标签: python python-2.7 python-decorators python-unittest