python - python中的每个单元测试之前都不会调用setUp函数

标签 python unit-testing

这是我测试类School的代码:

class SchoolTest(unittest.TestCase):
    def setUp(self):
        # assertCountEqual is py3, py2 only knowns assetItemsEqual
        if not hasattr(self, 'assertCountEqual'):
            self.assertCountEqual = self.assertItemsEqual
        self.school = School("Haleakala Hippy School")

    def test_an_empty_school(self):
        for n in range(1, 9):
            self.assertCountEqual(set(), self.school.grade(n))

    def test_add_student(self):
        self.school.add("Aimee", 2)
        self.assertCountEqual(("Aimee",), self.school.grade(2))

我想在每次测试之前创建一个新的 School 对象。当我运行测试时,最终出现以下错误:

    def test_an_empty_school(self):
        for n in range(1, 9):
           self.assertCountEqual(set(), self.school.grade(n))
    AssertionError: Element counts were not equal:
    First has 0, Second has 1:  'Aimee'

这意味着首先调用第二个测试,并且没有创建新对象,这就是第一个测试失败的原因。

如果我评论其中任何一个并运行测试,无论我评论哪一个,它都会通过。

我觉得我错过了一件基本的事情。

我做错了什么?

以防万一,学校类(class):

class School():
    _db = dict()

    def __init__(self, name):
        self.name = name

    @property
    def db(self):
        return self._db

    def add(self, student, grade):
        if grade not in self._db:
            self._db[grade] = set()

        self._db[grade].add(student)

    def grade(self, grade):
        if grade not in self._db:
            return set()

        return self._db[grade]

    def sort(self):
        sorted_list = []

        for grade in self._db:
            sorted_list.append((grade, tuple(self._db[grade])))

        return sorted_list

最佳答案

问题是 School._db上的属性,而不是实例上的属性,因此需要修改 School._db 在测试运行之间幸存下来。

您应该通过初始化 _db 使其成为一个实例属性 School.__ init __

class School():

    def __init__(self, name):
        self.name = name
        self._db = dict()

关于python - python中的每个单元测试之前都不会调用setUp函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36503157/

相关文章:

python - 如何在 Python 中将图像数组转换为二维数组

java - 无法使用 Jython 和 mysql.connector 模块连接到 mysql 数据库

unit-testing - 纠缠和测试枚举

python - Firefox 断开连接后 Flask sse-stream 未终止

python - python 中的高效字符串比较,包括数值评估

python - Spark RDD 到 DataFrame python

unit-testing - 使用 mocha 测试 Angular 2 服务

c++ - 如何在通过自动工具构建的项目中使用Google Test?

c++ - 如何使用 C++ 在 Xcode 上成功执行 TDD?

c# - 如果发生对静态记录器的调用,如何进行单元测试