python 2.6 - django TestCase - assertRaises ValidationError clean() 方法

标签 python django python-2.6 testcase

Django 1.5 和 Python 2.6。

该模型有一个 clean() 方法来验证 job.company_id 必须等于 job.location.company_id

我正在尝试为此编写测试,但测试没有通过/未通过测试,而是以来自模型的 clean() 方法的验证错误消息结束。

这是代码(省略了不相关的位):

在 models.py 中:

class Job(models.Model):
    title = models.CharField(max_length=200, verbose_name="Job title")
    company = models.ForeignKey(Company)    
    location = models.ForeignKey(Location, blank=True, null=True)

    def clean(self):
        from django.core.exceptions import ValidationError
        '''
        Location.company_id must equal Job.company_id
        '''
        if (self.company_id != Location.objects.get(pk=self.location_id).company_id):
            raise ValidationError('Location is not valid for company')

在测试.py中:

class job_cannot_have_invalid_location_and_can_have_valid_location(TestCase):
    def test_jobs_and_locations(self):
        job2 = Job.objects.create(company_id=company2.id)
        location1 = Location.objects.create(company_id=company1.id)
        job2.location_id = location1.id
        self.assertRaises(ValidationError, job2.clean())

当我运行 python manage.py 测试时:

.E.
======================================================================
ERROR: test_jobs_and_locations     (companies.tests.job_cannot_have_invalid_location_and_can_have_valid_location)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/djangobox/jobboard/companies/tests.py", line 60, in test_jobs_and_locations
    self.assertRaises(ValidationError, job2.clean())
  File "/home/djangobox/jobboard/companies/models.py", line 151, in clean
    raise ValidationError('Location is not valid for company')
ValidationError: [u'Location is not valid for company']

最佳答案

问题是您对 assertRaises 的使用。它应该使用异常和可调用函数来检查:http://docs.python.org/2/library/unittest.html#unittest.TestCase.assertRaises

但是,您传递的不是可调用的 job2.clean,而是可调用的 job2.clean() 的返回值。将调用更改为

self.assertRaises(ValidationError, job2.clean)

应该修复异常和你的测试用例。

关于python 2.6 - django TestCase - assertRaises ValidationError clean() 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20354385/

相关文章:

python 2.6,pygame,乒乓球不会正确地在 y 坐标上移动

javascript - django post请求未在终端中显示javascript blob对象

python - 在 scikit-learn 中可视化决策树

python - 在 OS X Mavericks 上启动 Django 项目时出现问题

python - django-gunicorn-nginx : 502 bad gateway

linux - 一个用户而不是另一个用户的Python模块导入错误

python - python2.6中将整数转换为格式化的二进制字符串

python - 在 iPython Notebook 中使用 matplotlib.pyplot

Python如何遍历列表并比较其中找到的字符串列表

python - Django:如何在语法错误上向用户获取模板调试信息