Можно ли вернуть bool из unittest.TestCase? - PullRequest
0 голосов
/ 27 ноября 2018

Я хочу записать результаты тестирования в файл Excel.Это мой ожидаемый результат

test, True, 2018/11/27    OR    test, False, 2018/11/27

В настоящее время для достижения этого у меня невероятно громоздкий смысл.Вот мой класс писателя Excel

xlwriter.py

class XLWriter:

def __init__(self, file):

    self.workbook = load_workbook(file)
    self.worksheet = self.workbook['Sheet1']
    self.file = file

def write_true(self, row):

    index = 0
    # function name, declare test passed, date
    values = [inspect.stack()[1][3], True, datetime.date)]
    # column numbers of above
    columns = [4, 6, 8]

    while index < 2:
        cell = self.worksheet.cell(row=row, column=columns[index])
        cell.value = values[index]
        index += 1

def write_true(self, row):

    index = 0
    # function name, declare test passed, date
    values = [inspect.stack()[1][3], False, datetime.date)]
    # column numbers of above
    columns = [4, 6, 8]

    while index < 2:
        cell = self.worksheet.cell(row=row, column=columns[index])
        cell.value = values[index]
        index += 1

и пример диссертации из теста

test.py

try:
    self.assertEqual(url, url)
    xl.write_true(14)
    xl.save()
except:
    xl.write_false(14)
    xl.save()

Это не масштабируется.Я думал, что быстрым решением было бы вернуть True или False bool в зависимости от того, был ли тест успешным, но я не вижу функции для такого поведения в документах unittest.

1 Ответ

0 голосов
/ 01 марта 2019

Короткий ответ - Нет.

Длинный ответ - Нет. Но .. Есть способы обойти эту проблему.


Чтобы еще раз решить проблему через три месяца, чего мы на самом деле планируем достичь?

Мы хотим сделать следующее

  1. Провести юнит-тест
  2. Скажите нашимбаза данных, тест прошел успешно

В этом случае нет необходимости возвращать что-либо из самого теста.Вместо возврата логического значения мы можем вместо этого отправить уведомление xlwriter.px с необходимой информацией.

Прежде чем мы это сделаем, нам нужно переписать xlwriter.py.С момента создания этого скрипта я перенес базу данных на SQLite.

Manager.py

import sqlite3
import datetime
import os

class Manager:
    def write_results_true(self, test):
        connection = sqlite3.connect(os.path.abspath('path'))
        connection.execute('UPDATE Details '
                           'SET Passed'
                           '= "True"'
                           'WHERE Name = "' + test + '";')
        connection.commit()
        connection.close()

    def write_results_false(self, test):
        connection = sqlite3.connect(os.path.abspath('path'))
        connection.execute('UPDATE Details '
                           'SET Passed'
                           '= "False"'
                           'WHERE Name = "' + test + '";')
        connection.commit()
        connection.close()

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

test.py

    def test_sample_test(self):
        """
        A sample test
        """
        a = 1

        if a == 1:
            m.write_results_true(stack()[0].function)
            self.assertEqual(a, 1)
        else:
            m.write_results_false(stack()[0].function)
            # A comment on why the test has failed
            self.fail('a does not equals 1')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...