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

Python中使用外部数据文件进行单元测试,python,python-unittest,Python,Python Unittest,我是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)

我是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)
移动到分类的顶部就可以了

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 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)

是的,第二个例子正是我想做的,谢谢