在 Python 中使用外部数据文件进行单元测试

Unit testing with external data file in Python

我是 python 的新手,正在尝试 运行 单元测试注入来自外部文件的数据:

class TestIsEquivalent(unittest.TestCase):

    filename = os.getcwd() + '\data\test-data.txt'

    with open(filename) as f:
        testdata = f.readlines()

    for value in testdata:
        print(value)

        def test_0(self):
            result = isEquivalent(value, value, 0)
            self.assertEqual(result, True)

我在测试函数中调用 isEquivalent() 行时收到以下错误:

NameError: name 'value' is not defined 

这似乎暗示了范围界定问题,但我不知道如何将 for 循环中的值传递到测试方法中。任何建议将不胜感激。

您的完整测试用例应该包含在一个函数中。我不完全确定你想用 for 循环内的函数定义做什么,但是将 def test_0(self) 移动到 classing 的顶部就可以了。

class TestIsEquivalent(unittest.TestCase):
    def test_0(self):

        filename = os.getcwd() + '\data\test-data.txt'

        with open(filename) as f:
            testdata = f.readlines()

        for value in testdata:
            print(value)

            result = isEquivalent(value, value, 0)
            self.assertEqual(result, True)

但是如果你想创建多个测试用例,你所有的值都在testdata里面,而且你不想多次读取文件,你可以使用setUpClass函数,它只执行一次在 class 内开始所有单元测试。结果看起来像这样。

class TestIsEquivalent(unittest.TestCase):

    @classmethod
    def setUpClass(cls):
        filename = os.getcwd() + '\data\test-data.txt'

        with open(filename) as f:
            cls.testdata = f.readlines()

    def test_0(self):
        for value in self.testdata:
            print(value)

            result = isEquivalent(value, value, 0)
            self.assertEqual(result, True)