Django unittest assertRaise用于自定义错误

Pau*_*aul 5 django unit-testing

我已经定义了一个自定义错误,但如果我测试是否引发了自定义错误,则会失败.

我的models.py:

class CustomError(Exception):
    """
    This exception is my custom error
    """

class Company(models.Model):
    name = models.CharField(max_length=200)

    def test_error(self):
    raise CustomError('hello')
Run Code Online (Sandbox Code Playgroud)

在我的tests.py中:

import unittest
from myapp.models import Company,Customer,Employee,Location,Product,ProductCategory,AllreadyPayedError,CustomError

class CompanyTestCase(unittest.TestCase):
    def setUp(self):
        self.company = Company.objects.create(name="lizto")

    def test2(self):
        self.assertRaises(CustomError, self.company.test_error)
Run Code Online (Sandbox Code Playgroud)

此输出的测试失败:

======================================================================
ERROR: test2 (myapp.api.tests.CompanyTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/......./tests.py", line 27, in test2
    self.assertRaises(CustomError, self.company.test_error)
  File "/System/Library/Frameworks/Python.framework/Versions/2.5/lib/
python2.5/unittest.py", line 320, in failUnlessRaises
    callableObj(*args, **kwargs)
  File "    /Users/....../models.py", line 17, in test_error
    raise CustomError('hello')
CustomError: hello

----------------------------------------------------------------------
Ran 18 tests in 1.122s
Run Code Online (Sandbox Code Playgroud)

任何人都知道我应该做些什么来测试是否CustomError会被提升

Pau*_*aul 2

感谢安迪的回答,但问题是我使用了错误/不同类型的导入:在 INSTALLED_APPS 的设置中,我有 myproj.myapp

我改变后:

from myapp.models import Company,CustomError 
Run Code Online (Sandbox Code Playgroud)

到:

from myproj.myapp.models import Company,CustomError 
Run Code Online (Sandbox Code Playgroud)

它按预期工作