命令行Django测试报错:<model name>匹配查询不存在
Django test error in command line: <model name> matching query does not exist
这是我的 tests.py
文件:
from django.test import TestCase
from .models import *
from django.contrib.auth.models import User
class ArticleTestCase(TestCase):
@classmethod
def setup(self):
Article.objects.create(
article_title="title1",
article_content="content of article",
)
def test_article_title(self):
a1 = Article.objects.get(pk=1)
article_name = a1.article_title
self.assertEquals(article_name, 'title1')
但是,我总是收到这个错误:
Traceback (most recent call last):
File "F:\Django_Blog_Live\swagato_blog_site\blog_api\tests.py", line 16, in test_article_title
a1 = Article.objects.get(pk=1)
File "F:\Django_Blog_Live\env\lib\site-packages\django\db\models\manager.py", line 82, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "F:\Django_Blog_Live\env\lib\site-packages\django\db\models\query.py", line 415, in get
raise self.model.DoesNotExist(
blog_api.models.Article.DoesNotExist: Article matching query does not exist.
错误描述指向这个语句:a1 = Article.objects.get(pk=1)
我做错了什么?
setup
不是方法的正确名称。正确的名称是 setUp
(注意大写 U
)。而且 不是 而是 classmethod
.
还有另一种方法叫做 setUpClass
,它 是 一个 classmethod
。
两者之间的区别在于setUp
是每个测试方法之前的运行,而setUpClass
是整个测试用例的运行一次。
用法:
使用setUp
方法很简单:
class ArticleTestCase(TestCase):
def setUp(self):
# create objects
# ...
在 Django 中,如果您使用 setUpClass
,您还需要对父 class:
进行 super
调用
class ArticleTestCase(TestCase):
@classmethod
def setUpClass(cls):
super().setUpClass() # call parent
# create objects
# ...
这是我的 tests.py
文件:
from django.test import TestCase
from .models import *
from django.contrib.auth.models import User
class ArticleTestCase(TestCase):
@classmethod
def setup(self):
Article.objects.create(
article_title="title1",
article_content="content of article",
)
def test_article_title(self):
a1 = Article.objects.get(pk=1)
article_name = a1.article_title
self.assertEquals(article_name, 'title1')
但是,我总是收到这个错误:
Traceback (most recent call last):
File "F:\Django_Blog_Live\swagato_blog_site\blog_api\tests.py", line 16, in test_article_title
a1 = Article.objects.get(pk=1)
File "F:\Django_Blog_Live\env\lib\site-packages\django\db\models\manager.py", line 82, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "F:\Django_Blog_Live\env\lib\site-packages\django\db\models\query.py", line 415, in get
raise self.model.DoesNotExist(
blog_api.models.Article.DoesNotExist: Article matching query does not exist.
错误描述指向这个语句:a1 = Article.objects.get(pk=1)
我做错了什么?
setup
不是方法的正确名称。正确的名称是 setUp
(注意大写 U
)。而且 不是 而是 classmethod
.
还有另一种方法叫做 setUpClass
,它 是 一个 classmethod
。
两者之间的区别在于setUp
是每个测试方法之前的运行,而setUpClass
是整个测试用例的运行一次。
用法:
使用setUp
方法很简单:
class ArticleTestCase(TestCase):
def setUp(self):
# create objects
# ...
在 Django 中,如果您使用 setUpClass
,您还需要对父 class:
super
调用
class ArticleTestCase(TestCase):
@classmethod
def setUpClass(cls):
super().setUpClass() # call parent
# create objects
# ...