0
最后几天我测试了一些python中的工具来自动化unittest,比如C#中的TestCase。Python单元测试:unterstand修饰器问题
我知道一些框架支持这个技术,但我会更详细地学习python,所以我想理解这一点。
对我来说,以下文章有一个很好的答案(来自Xavier Decoret),所以我试了一下,结果非常好,但我无法堆砌装饰器。
Python unittest: Generate multiple tests programmatically?
总之我的代码,由此导致的异常和环境两个部分:
import sys
def for_examples(*parameters):
def tuplify(x):
if not isinstance(x, tuple):
return (x,)
return x
def decorator(method, parameters=parameters):
for parameter in (tuplify(x) for x in parameters):
def method_for_parameter(self, method=method, parameter=parameter):
method(self, *parameter)
args_for_parameter = ",".join(repr(v) for v in parameter)
name_for_parameter = method.__name__ + "(" + args_for_parameter + ")"
frame = sys._getframe(1) # pylint: disable-msg=W0212
frame.f_locals[name_for_parameter] = method_for_parameter
return None
return decorator
import unittest
# some magic code will be added here later
from params import for_examples
class DummyTest(unittest.TestCase):
@for_examples(1, 2)
@for_examples(3, 4)
def test_is_smaller_than_four(self, value):
self.assertTrue(value < 4)
@for_examples((1,2),(2,4),(3,7))
def test_double_of_X_is_Y(self, x, y):
self.assertEqual(2 * x, y)
if __name__ == "__main__":
unittest.main()
AttributeError: 'NoneType' object has no attribute '__name__'
Launching unittests with arguments python -m unittest test.DummyTest.test_double_of_X_is_Y in D:\rené\PycharmProjects\params
Windws 10 Home 64-bit
PyCharm Community Edition 2017.1.1
Python 3.6.1
希望有人能帮助我理解我的问题,我们可以找到一个可堆叠的解决方案。
是的,我只有一个装饰测试,但对我的理解我会已知为什么不可能用两个装饰器。运行两次必须更改的内容。 我已经测试了一些与返回类型没有令人满意的结果的变化。当我使用'method_for_parameter'作为返回类型时,测试框架不会执行任何操作。 –
@rené“正确的”返回值是'method'。但是你会有一个额外的测试用例,因为它没有收到任何参数,所以总会失败。 –