测试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
,等等。所以你可以说“元层次结构”一直持续到无穷远。