Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.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
Django Rest框架测试是否使用;模拟;数据库_Django_Unit Testing_Django Rest Framework - Fatal编程技术网

Django Rest框架测试是否使用;模拟;数据库

Django Rest框架测试是否使用;模拟;数据库,django,unit-testing,django-rest-framework,Django,Unit Testing,Django Rest Framework,我正试图找到测试POST-only端点的最佳方法,该端点使用有效负载并从该数据创建6个不同的对象。我试图发送有效负载,然后断言应该创建的所有对象都已创建。最后一个块(新行之后)尝试重新发布相同的加载,并确保未创建重复项 我的问题是,如果我运行此测试,是否使用现有数据库?还是建立一个“模拟”数据库,并在测试运行后将其拆除?我不想这些数据影响我的数据库 class APITests(APITestCase): def test_job_start(self): url = '

我正试图找到测试POST-only端点的最佳方法,该端点使用有效负载并从该数据创建6个不同的对象。我试图发送有效负载,然后断言应该创建的所有对象都已创建。最后一个块(新行之后)尝试重新发布相同的加载,并确保未创建重复项

我的问题是,如果我运行此测试,是否使用现有数据库?还是建立一个“模拟”数据库,并在测试运行后将其拆除?我不想这些数据影响我的数据库

class APITests(APITestCase):
    def test_job_start(self):
        url = '/api/v1/job_start/'
        response = self.client.post(url, data, format='json')
        self.assertEqual(response.status_code, status.HTTP_201_CREATED)
        self.assertEqual(Platform.objects.count(), 1)
        self.assertEqual(Platform.objects.get().name, 'andr')
        self.assertEqual(CdTool.objects.count(), 1)
        self.assertEqual(CdTool.objects.get().name, 'https://jenkins-andr.test.com')
        self.assertEqual(Job.objects.count(), 1)
        self.assertEqual(Job.objects.get().name, 'ANDR_master_CI')
        self.assertEqual(JobExecution.objects.count(), 1)
        self.assertEqual(JobExecution.objects.get().build_id, '3500')


        # Send the same payload, make sure no duplicate records are created
        response = self.client.post(url, data, format='json')
        self.assertEqual(Platform.objects.count(), 1)
        self.assertEqual(CdTool.objects.count(), 1)
        self.assertEqual(Job.objects.count(), 1)
        self.assertEqual(JobExecution.objects.count(), 1)
1)来自官方Django:

需要数据库的测试(即模型测试)不会使用“真实”(生产)数据库。为测试创建单独的空白数据库。无论测试通过还是失败,当所有测试都已执行时,测试数据库都将被销毁

2)您的
APITestCase
扩展了
TestCase
,它根据:

另一方面,测试用例在测试后不会截断表。相反,它将测试代码封装在测试结束时回滚的数据库事务中。显式提交(如transaction.commit())和隐式提交(可能由transaction.atomic()引起)都被替换为nop操作。这保证了测试结束时的回滚将数据库恢复到其初始状态