Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
测试python类对象实例_Python_Django_Class_Oop - Fatal编程技术网

测试python类对象实例

测试python类对象实例,python,django,class,oop,Python,Django,Class,Oop,我有一个要测试的函数: def get_django_模型(django_模型): 尝试: app\u config=apps.get\u app\u config(“myapp”) model=app\u config.get\u model(django\u model) 回归模型 除例外情况外: raise DjangoModelMissing(f“Missing django model:{django_model}”) 这是我的测试: class ModelInstanceTest(

我有一个要测试的函数:

def get_django_模型(django_模型):
尝试:
app\u config=apps.get\u app\u config(“myapp”)
model=app\u config.get\u model(django\u model)
回归模型
除例外情况外:
raise DjangoModelMissing(f“Missing django model:{django_model}”)
这是我的测试:

class ModelInstanceTest(TestCase):
def test_get_django_模型(自):
model\u class=get\u djagno\u model(“Foo”)
断言立场(model_类,models.Foo)
上述测试失败,说明
AssertionError:不是
的实例

但是,如果我将
assertIsInstance
替换为
assertIsInstance
,则测试通过

有人能解释一下这是怎么回事吗


这篇文章是相关的,但没有真正解释不同的结果:。

您的
get\u django\u model
函数返回对类的引用,而不是该类的对象(实例)。因此,它不会返回
Foo
对象,而是返回对
Foo
类的引用

因此,
model\u类
实际上等于
models.Foo
,但不是
models.Foo
的实例。但是,它是
类型的一个实例,因此您可以检查:

class ModelInstanceTest(TestCase):

    def test_get_django_model(self):
        model_class = get_djagno_model('Foo')
        self.assertIsInstance(model_class, type)
        self.assertEqual(model_class, models.Foo)
class ModelInstanceTest(TestCase):
def test_get_django_模型(自):
model\u class=get\u djagno\u model('Foo')
断言状态(模型类,类型)

self.assertEqual(model_class,models.Foo)
一个类实际上不是该类的实例。你的测试中也有一个输入错误
get_djagno_model
(django)当你说它返回一个类的引用时,这和说它返回一个元类是一样的吗?@dwvldg:一个类的类型是一个元类。是的,你可以说,
model\u class
是一个元类的对象。
type
meta class
是一样的吗?换句话说,
self.assertIsInstance(model\u class,type)
只是说
model\u class
是一个元类的实例吗?有没有其他方法来测试某个东西是否是一个元类的实例?@dwvldg:但是没有明确的区别,因为在Python中,所有东西都是一个对象。
type
的类型是
type
,等等。所以你可以说“元层次结构”一直持续到无穷远。