Python鼻子:在生成的测试上设置描述属性

时间:2016-05-20 00:00:57

标签: python nose attributeerror

我使用带鼻子的测试发生器。我想为每个生成的测试提供自定义描述。

Nose documentation 说:

  

默认情况下,详细模式下生成的测试的测试名称输出   将是生成器函数或方法的名称,后跟   args传递给屈服的callable。如果你想表现出不同的   测试名称,设置产生的可调用的描述属性。

但是,这不起作用:

class TestGraphics:
   def test_all(self):                                                                                             
        for i, tc in enumerate(testcases):                                                                       
            self.run_sim.description = str(i)
            yield(self.run_sim, tc[0], tc[1]) 

我明白了:

AttributeError: 'method' object has no attribute 'description'

如何在callable上设置description属性?

1 个答案:

答案 0 :(得分:4)

下面的解决方法,herehere,似乎有效。

from nose.tools import assert_true

class TestEven:

    def test_evens(self):
        for i in range(0, 5):
            yield self.check_even("check_even with {}".format(i)), i

    def check_even(self, desc):
        func = lambda n: assert_true(n % 2 == 0)
        func.description = desc
        return func
class TestEven:

    def test_evens(self):
        for i in range(0, 5):
            yield CheckEven(), i

class CheckEven:

    def __call__(self, n):
        self.description = "check_even with {}".format(n)
        assert n % 2 == 0
from functools import partial

class TestEven:

    def test_evens(self):
        for i in range(0, 5):
            f = partial(self.check_even, i)
            f.description = 'check_even with {}'.format(i)
            yield (f, )

    def check_even(self, n):
        assert n % 2 == 0