- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在运行 django + django_tenants + django_restframework。在 Multi-Tenancy 环境中,每个模式的租户表中都需要有一个实例 - 在我的测试中,这意味着“public”、“test”和“test2”。
创建这些租户及其相应的模式需要为所有测试创建。这些实例中的数据不会更改,因此我想在测试运行开始时执行一次,并且在此期间不再重复。
我从研究中学到的东西:
我遇到的问题是,当我的第二组测试运行时,我在尝试创建租户/模式时遇到异常,因为它们已经存在。
我还在 Django 高级测试文档中找到了 setup_databases() 并且我想知道这是否是这个地方......即它可以被子类化吗?
这是我的基类,所有测试都来自...
class TenantTestCase(APITestCase):
public_tenant = None
test_tenant = None
test2_tenant = None
@classmethod
def setUpClass(cls):
cls.add_allowed_test_domain()
cls.setUpTestData()
@classmethod
def setUpTestData(cls):
print('run setUpTestData')
cls.public_tenant = Tenant.create_tenant('Public')
cls.test_tenant = Tenant.create_tenant('Test')
cls.test2_tenant = Tenant.create_tenant('Test2')
connection.set_tenant(cls.public_tenant)
我读到 setUpTestData() 应该在每个测试用例之前运行(如果从 django.test.testcase 继承),但它没有在我的案例中运行。我必须将 cls.setUpTestData() 放在 setUpClass() 中才能运行。
这是我的一项测试的精简示例...
class TenantModelTests(TenantTestCase):
def setUp(self):
self.client = APIClient()
super(TenantModelTests, self).setUp()
def test_check_public_tenant(self):
self.assertIsInstance(self.public_tenant, Tenant)
self.assertEqual(self.public_tenant.name, 'Public', 'Public tenant name is not "Public".')
self.assertEqual(self.public_tenant.subdomain, '', 'Public tenant subdomain is not blank.')
self.assertEqual(self.public_tenant.schema_name, 'public', 'Public tenant schema_name is not "public".')
def test_check_private_tenants(self):
self.assertIsInstance(self.test_tenant, Tenant)
self.assertEqual(self.test_tenant.name, 'Test', 'Test tenant name is not "Test".')
self.assertEqual(self.test_tenant.subdomain, 'test', 'Test tenant subdomain is not "test".')
self.assertEqual(self.test_tenant.schema_name, 'test', 'Test tenant schema_name is not "test".')
当我在两个不同的应用程序中使用两个测试文件运行它时,我看到两次“run setUpTestData”——当然,我看到了“已经存在”的异常。那么应该在整个测试运行开始时运行一次的代码放在哪里呢?
最佳答案
setUpTestData
为 TestCase 调用一次。如果数据库不支持事务,将在每次测试运行之前调用 setUpTestData。
更改您的 setUpClass
并且不要直接调用 setUpTestData
。尝试用户 super()
@classmethod
def setUpClass(cls):
cls.add_allowed_test_domain()
super(TenantTestCase, cls).setUpClass()
引用: https://docs.djangoproject.com/en/1.11/topics/testing/tools/#testcase请注意,如果测试在不支持事务的数据库上运行(例如,带有 MyISAM 引擎的 MySQL),将在每次测试之前调用 setUpTestData(),从而抵消速度优势。
关于Django:如何让 setUpTestData 为所有测试运行一次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57197742/
我需要在我的 setUpTestData 序列中添加多对多关系,这样我的测试才能正确运行。 根据 the docs ,在保存对象之前无法创建多对多关系,因为主键必须首先存在。这意味着我不能像处理其他变
我正在运行 django + django_tenants + django_restframework。在 Multi-Tenancy 环境中,每个模式的租户表中都需要有一个实例 - 在我的测试中,
我真的很享受 Django 1.8 中 setUpTestData 和 --keepdb 带来的便利! 但是,我遇到了在多个测试文件中保持数据一致的问题。我想将我的 setUpTestData 类方法
Django 1.8 附带 a refactored TestCase它允许通过 setUpTestData() 使用事务和保存点在类级别初始化数据方法。这与 unittest 的 setUp() 形
classmethod TestCase.setUpTestData() The class-level atomic block described above allows the creatio
我正在尝试使用测试运行程序测试 Django 应用程序。我想设置一次测试数据以运行多个不同的测试类,而不是在每个测试类中设置相同的数据。因此,我使用 setUpTestData() 而不是 setUp
继承母类使其类方法 setUpTestData 为每个子类调用。这是我异常(exception)但不是我想要的。 这是一个极简主义的例子 from django.test import TestCas
我有一堆 fixture 东西,我想为测试类做一次,但我也不希望相关的测试弄乱它。 我还没有真正了解 py.test fixture 系统,所以我不知道应该如何完成。 在 vanilla Django
更具体地说,每个的用例是什么? 目前我所了解的内容: 设置类 此方法在测试类中的所有测试之前运行一次 设置测试数据 如果数据库支持事务,则此方法运行一次。否则它会在每次测试之前运行。 设置 此方法在测
我在单元测试中遇到了数据库问题。我认为这与我使用 TestCase 和 setUpData 的方式有关。 当我尝试使用某些值设置我的测试数据时,测试会抛出以下错误: django.db.utils.I
我是一名优秀的程序员,十分优秀!