Python / Django - 如何让unittest类中的所有方法共享同一个数据库?

时间:2015-10-24 21:07:38

标签: python django unit-testing python-unittest django-unittest

这是我的代码:

我的导入链接在这里: https://github.com/django/django/blob/master/django/core/urlresolvers.py https://github.com/django/django/blob/master/django/contrib/auth/models.py https://github.com/tomchristie/django-rest-framework/blob/master/rest_framework/status.py https://github.com/tomchristie/django-rest-framework/blob/master/rest_framework/test.py

from django.core.urlresolvers import reverse
from django.contrib.auth.models import User
from rest_framework import status
from rest_framework.test import APITestCase

class UserTests(APITestCase):
    def test_create_user(self):
        """
        Ensure we can create a new user object.
        """
        url = reverse('user-list')
        data = {'username': 'a', 'password': 'a', 'email': 'a@hotmail.com'}
        # Post the data to the URL to create the object
        response = self.client.post(url, data, format='json')
        self.assertEqual(response.status_code, status.HTTP_201_CREATED)
        # Check the database to see if the object is created.
        # This check works.
        self.assertEqual(User.objects.count(), 1)

    def test_get_user(self):
        """
        Ensure we can get a list of user objects.
        """
        # This fails and returns an error
        self.assertEqual(User.objects.count(), 1)

当我运行测试时,会引发错误AssertionError: 0 != 1,因为在函数test_get_user中,在test_create_user中创建的用户不可见。有没有办法让我在一个类中获取所有方法来共享同一个数据库,这样如果我在test_create_user中创建一个用户,我可以通过下面的方法访问它?

编辑:我希望他们为所有方法共享同一个数据库的原因是因为UserTests类中的所有测试用例都需要创建一个用户,所以我不想重复即使在test_create_user中进行测试,也始终使用相同的代码。

我知道我可以使用def setUp(self),但我正在我的第一个方法中进行“创建用户”测试,所以我希望能够测试我是否可以在{{1}创建它之前先创建它}。

1 个答案:

答案 0 :(得分:4)

您应该在每次测试中明确设置数据。测试不能相互依赖。