python - django 测试中的错误
问题描述
我试图运行以下测试,但我不确定为什么它不工作,因为在运行测试时创建了一个测试数据库,这意味着新创建的项目的 id 为 1,但我仍然收到一个错误,即没有对象与查询匹配
模型
from django.db import models
# Create your models here.
class Post(models.Model):
text = models.TextField()
def __str__(self):
return self.text[:50]
测试
from django.test import TestCase
from .models import Post
# Create your tests here.
class PostModelTest(TestCase):
def setup(self):
post = Post.objects.create(text="just a test")
def test_text_content(self):
post = Post.objects.get(id=1)
expected_obect_name = f'{post.text}'
self.assertEqual(expected_obect_name, 'just a test')
解决方案
首先你应该命名方法setUp
not setup
。这是区分大小写的。但这可能无法解决您的问题,因为 django 不会为每个TestCase
类重置自动 ID。因此,如果您有另一个具有相同代码的测试用例,错误将再次发生。要解决它,您需要将 post id 保存为 egself.post_id
并在测试方法中使用它而不是1
:
class PostModelTest(TestCase):
def setUp(self):
post = Post.objects.create(text="just a test")
self.post_id = post.pk
def test_text_content(self):
post = Post.objects.get(id=self.post_id)
expected_obect_name = f'{post.text}'
self.assertEqual(expected_obect_name, 'just a test')
推荐阅读
- c++ - Qt 当值发生变化时,如何从 int 获取信号?
- spring - 将 mongoshell 投影转换为 Spring MongoTemplate 投影
- python-3.x - subprocess.CalledProcessError: Command '['gs', '-q', ...] 返回非零退出状态 2
- sql - 将嵌套的 Json 数据解析为 SQL Server 表
- c# - 将自定义 x 轴类别添加到 c# 以编程方式创建的 excel 折线图
- sql - 如何最有效地过滤基于另一个表的 SQL 查询?
- ssis - 执行 SSIS 包时检索 COM 类工厂错误
- mongodb - 从另一个集合中获取不同的 id 列表,其中数组字段包含来自 MongoDB 中当前集合中的项目的 id
- snowflake-cloud-data-platform - 雪花:有没有不使用创建仓库的方法?
- reactive-programming - 如何使用 Rx.Net 根据观察者的执行时间来节流