测试测试函数装饰器

时间:2013-12-22 00:26:02

标签: python django

如何测试仅用于django的TestCase方法的装饰器?我有一个装饰器,它创建管理员用户并将用户登录到测试客户端:

def create_admin_user_and_login(func):                                                                                                                                                                       
    @wraps(func)
    def wrapper(self):
        faker = Faker()
        username = faker.pronounceable_unique_id(length=30)
        password = faker.password()
        user = User.objects.create_user(
            username=username,
            first_name=faker.word().title(),
            last_name=faker.word().title(),
            email=faker.email(),
            password=password)
        user.is_staff = True
        user.is_superuser = True
        user.save()
        self.client.login(username=username, password=password)
        return func(self)
    return wrapper

Faker()是假数据生成器,与主题无关。我像这样使用这个装饰器:

class SomeUnitTest(TestCase):
    @create_admin_user_and_login
    def test_login_required(self):
        self.assertContains(self.client.get(reverse('some_url')), 'logged in')

如何测试这个装饰器?我查看了cpython源代码以获得答案,但我找不到我的用例。

1 个答案:

答案 0 :(得分:1)

由于没有建议的传统解决方案,我找到了一个简单的解决方案:

class HelpersTest(TestCase):

    @helpers.create_admin_user_and_login
    def test_create_admin_user_and_login(self):
        self.assertIn('_auth_user_id', self.client.session)
        user = User.objects.get(pk=self.client.session['_auth_user_id'])
        self.assertTrue(user.is_staff)
        self.assertTrue(user.is_superuser)

我认为coverage.py可能会遇到一些问题,但这不是主要因素。

更新:coverage.py没有任何问题,解决方案运作正常。