Django unittest assertRaise для пользовательской ошибки - PullRequest
5 голосов
/ 14 февраля 2009

Я определил пользовательскую ошибку, но если я проверю, получает ли пользовательская ошибка поднят, это терпит неудачу.

My 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')

и в моих тестах.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)

Тест не пройден с таким выводом:

======================================================================
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

Кто-нибудь знает, что я должен сделать, чтобы проверить, если CustomError поднимется

Ответы [ 3 ]

4 голосов
/ 15 февраля 2009

Вы можете отловить ошибку и утверждать, что она произошла.

Например: (не проверено)

def test2(self)
    error_occured = False
    try:
        self.company.test_error()
    except CustomError:
        error_occured = True

    self.assertTrue(error_ocurred)

Кажется, далеко от идеала, но разблокирует вас.

2 голосов
/ 15 февраля 2009

Спасибо Энди за ваш ответ, однако проблема заключалась в том, что я использовал неправильные / разные виды импорта: В моих настройках в моем INSTALLED_APPS у меня был myproj.myapp

После того, как я изменил:

from myapp.models import Company,CustomError 

Кому:

from myproj.myapp.models import Company,CustomError 

Работает как положено

1 голос
/ 23 декабря 2011

Assert Raises, кажется, более не интуитивно понятен в использовании, чем другие юнит-тесты. Я думаю, что этот пост дает довольно хорошее представление о том, как его использовать (не просто обойти): Почему assertRaises не перехватывает мою ошибку атрибута при использовании python unittest?

Ура! * * 1005

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...