【问题标题】:Test if a class is inherited from another [duplicate]测试一个类是否继承自另一个[重复]
【发布时间】:2011-08-03 10:33:56
【问题描述】:

这个问题与 Python 相关,而不是与 Django 相关。我想测试为这个函数编写一个测试,我用它来动态获取一个带有我设置的字段的 Django 表单。

def quiz_form_factory(question):
    properties = {
        'question': forms.IntegerField(widget=forms.HiddenInput, initial=question.id),
        'answers': forms.ModelChoiceField(queryset=question.answers_set)
    }
    return type('QuizForm', (forms.Form,), properties)

我想测试返回的 QuizForm 类是否继承自 forms.Form。

类似:

self.assertTrue(QuizForm isinheritedfrom forms.Form)  # I know this does not exist

有什么办法吗?

【问题讨论】:

    标签: python unit-testing


    【解决方案1】:

    使用issubclass(myclass, parentclass)

    在你的情况下:

    self.assertTrue( issubclass(QuizForm, forms.Form) )
    

    【讨论】:

    • @bcdan 真的吗?它适用于直接、间接或虚拟继承。
    • @Bo.我用子类对其进行了测试。如果class Aclass B(A)class C(B)C.issubclass(A) 返回False。我的术语可能不正确,但我只是说这种技术性不适用于答案的完整性。
    • 旧线程,但为了完整性:bcdan 不正确。至少在 Python 3.x 中,他在上面给出的示例返回 True,如文档所示。
    • @bcdan 方法是issubclass(C, A)。我在 Python 2.7 上做了这个,它适用于新旧样式的类。
    • 在 3.7 版中,我测试了 issubclass(C, A)。它返回 True。
    【解决方案2】:

    使用内置的issubclass 函数。例如

    issubclass(QuizForm, forms.Form)
    

    它返回一个bool,所以你可以直接在self.assertTrue()中使用它

    【讨论】:

      猜你喜欢
      • 2012-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-07
      • 2016-01-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多