Странное поведение секции исключений во время юнит-теста в Python 3.7 - PullRequest
0 голосов
/ 10 октября 2018

У меня есть некоторый код создания БД sqlite.Есть несколько вариантов - если файл существовал или нет, или если он получает ошибку (запись на жесткий диск, неправильное имя БД, формат и т. Д.).Если метод работает правильно, он возвращает True, если он генерирует исключение, он возвращает False:

def create_db():
    try:
        db = sqlite3.connect(db_name)
        with db:
            db.execute("SELECT name FROM db_name WHERE type='table'")
        if os.path.isfile(db_name):
            my_logger.info('The DB already existed!')
            return 'DB existed'
        else:
            db = sqlite3.connect(db_name)
            with db:
                db.execute('''CREATE TABLE IF NOT EXISTS City_Weather (fields_description_here)''')
                my_logger.info('The DB was created successfully!')
            return 'DB created'

    except Exception as e:
        my_logger.info(e)
        return False

И я написал этот модульный тест для функции:

class ReadersTest(unittest.TestCase):

def test_create_db(self):
    self.assertEqual(create_db(), 'DB existed')

Странное поведение начинается тогда, когда я пытаюсь начать свои тесты:

DB existed != False

Expected :False
Actual   :DB existed
<Click to see difference>

Traceback (most recent call last):
  File "C:\Program Files\JetBrains\PyCharm 2018.2.2\helpers\pycharm\teamcity\diff_tools.py", line 32, in _patched_equals
old(self, first, second, msg)
 File     
"C:\Users\path\AppData\Local\Programs\Python\Python37\lib\unittest\case.py", line 839, in assertEqual
assertion_func(first, second, msg=msg)
 File "C:\Users\path\AppData\Local\Programs\Python\Python37\lib\unittest\case.py", 
line 832, in _baseAssertEqual
    raise self.failureException(msg)
AssertionError: False != 'DB existed'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File 
"C:\Users\path\AppData\Local\Programs\Python\Python37\lib\unittest\case.py", 
line 59, in testPartExecutor
  yield
  File "C:\Users\path\AppData\Local\Programs\Python\Python37\lib\unittest\case.py", line 615, in run
testMethod()
File "C:\file_path_to_project\utest.py", line 12, in test_create_db
  self.assertEqual(readers.Readers.create_db(), 'DB existed')

Почему модуль модульного теста ожидает правильного выражения "False"?Во время тестирования моя БД создана и должна пройти этот тест, но это не так.

Заранее спасибо!

1 Ответ

0 голосов
/ 10 октября 2018

Ошибка этого утверждения

self.assertEqual(create_db(), 'DB existed')

на самом деле вы ожидаете 'DB existed', но функция возвращает False, поэтому у вас должно быть исключение, которое заставляет его вернуть False

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