是否可以从unittest.TestCase返回布尔值?

时间:2018-11-27 16:19:00

标签: python-3.x unit-testing

我希望将测试结果记录在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()

这是不可扩展的。我当时想快速解决方案是根据测试是否成功返回TrueFalse bool,但是我在unittest文档中看不到该行为的函数。 / p>

1 个答案:

答案 0 :(得分:0)

简短答案-

长答案-否。但是,。解决问题的方法很多。


要在三个月后再次解决这个问题,我们实际上打算实现什么目标?

我们要执行以下操作

  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')
相关问题