为单元测试编写“匿名”子类?

2024-09-29 19:19:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前有一个Python unittest测试用例,如下所示:

from unittest import TestCase as UTestCase

import inspect 

class BaseParentTaskTest(UTestCase):

    def test_case_one(self):
        class A(BaseParentTask):
            def run(self, a, b):
                pass

        instance = A()

        print inspect.getargspec(instance.run).args

        instance._validate()

        if instance.valid:
            self.fail("Failed to invalidate based on wrong argument count.")

    def test_case_two(self):
        class A(BaseParentTask):
            def run(self, a, b, c, d):
                pass

        instance = A()

        print inspect.getargspec(instance.run).args

        if instance.valid:
            self.fail("Failed to invalidate based on wrong argument kw names.")

从我的测试来看,在运行test_case_one之后,A类被保存在内存中,运行时不会被test_case_two中的A覆盖。这会导致test_case_two失败。你知道吗

这可以从日志中看出。在test_case_one中,预期的输出是(self, a, b),它是:

(self, a, b)

test_case_two中,预期的输出是(self, a, b, c, d)

(self, a, b)

然而,显然不是。你知道吗

为什么实例方法一退出A类就不会被删除?我怎样才能解决这个问题使我的测试通过?你知道吗


Tags: instanceruntestimportselfdefpassunittest
1条回答
网友
1楼 · 发布于 2024-09-29 19:19:23

很明显,芹菜是罪魁祸首,因为它在幕后做了一些奇怪的事情来促成这一切。你知道吗

通过在每个子类上定义abstract类变量,问题就消失了:

class A(BaseParentTask):
    abstract = True
    def run(self, a, b, c, d):
        pass

我的理解是,除非用@celery.task注释注册,否则芹菜不会对该类做任何事情,但似乎它在内部仍然注册该类,而没有任何显式请求这样做。你知道吗

相关问题 更多 >

    热门问题