1

不确定这是否是骗局。就这样吧。

我需要编写一些 Python 代码,如下所示:

class TestClass:
    def test_case(self):
     def get_categories(self):
      return [“abc”,”bcd”]
     # do the test here

然后有一个测试引擎类扫描所有这些测试类,加载所有 test_case 函数,并为每个调用 get_categories 来确定测试是否属于特定运行的感兴趣组。

问题是 get_categories 不被视为 test_case 的属性,即使我手动分配它

class TestClass:
    def test_case(self):
     def get_categories(self):
      return [“abc”,”bcd”]
     # do the test here
     test_case.get_categories = get_categories

这只会在 test_case 第一次运行时发生,对我来说太晚了。

这个函数不能在类上运行的原因(或者至少为什么我希望它在每个函数级别也可用)是因为一个 TestClass 可以有多个测试用例。由于这是一个已经存在的测试基础设施,并且类别机制有效(除了不太重要的功能类别场​​景之外),因此计划中没有重写。

非常感谢语言技巧。

4

2 回答 2

0

嵌套函数不会像任何其他赋值一样成为属性。

如果不支持(并且使用旧式类!),我怀疑您的测试基础设施正在做一些非常奇怪的事情,但您可以这样做:

class TestClass:
    def test_case(self):
        # ...

    def _get_categories(self):
        return [...]
    test_case.get_categories = _get_categories
    del _get_categories

类主体是与任何其他块一样的可执行代码。

于 2013-02-27T02:27:36.270 回答
0

你需要的是嵌套类。函数不是用来做你想做的事,所以你必须提高一个档次。函数属性主要用作标记,而类可以有任何你想要的东西。

class TestClass(object):
    class TestCase(object):
         @classmethod
         def get_categories(cls):
             return ['abc', 'efg']

请注意,我使用@classmethod它是为了您可以在不实例化的情况下使用它TestCase();如果你想做就修改test_case = TestCase()

于 2013-02-27T02:35:11.600 回答