将函数移入类后单元测试失败

时间:2016-08-06 09:16:24

标签: python unit-testing

我正在尝试为一个类中的函数编写单元测试,但我遇到了一些麻烦。在将导入器功能移动到类中之前,此测试有效。但是,现在我得到了TypeError: grab_column_locations missing 1 required positional argument: 'sheet'。导入器函数本身正在正确解析sheet并在程序运行时正常工作,但在测试时则无法正常工作。

TypeError在导入器函数中引用的行是:

columns = self.grab_column_locations(sheet)

失败的测试是:

from unittest import TestCase

from gtt import GTT


class TestGTT(TestCase):

    def test_importer(self):
        """
        Test import of valid xlsx file
        :return:
        """

        file_list = ['testData_1.xls']

        # Run Test 1
        importer_results = GTT.importer(GTT, file_list)
        assert importer_results[0] == True

基本上,从测试开始,importer未将sheet传递给grab_column_locations。这只是在我将这两个函数都移到一个类中时才开始发生的。我知道我以某种方式破坏了什么,但是什么?

1 个答案:

答案 0 :(得分:0)

错误消息说明:

TypeError: grab_column_locations missing 1 required positional argument: 'sheet'

这听起来像是函数签名:

def grab_column_locations(self, sheet):

您是不是从拥有此功能的类的实例调用它?

即,如果函数属于类Foo

class Foo:
    def grab_column_locations(self, sheet):
        ...

错误消息让我认为您正在调用该函数,如下所示:

Foo.grab_column_locations(sheet)

当你真的应该打电话时:

foo = Foo()
foo.grab_column_locations(sheet)

或者,如果您不想将其绑定到实例,则可以将该功能定义为方法:

class Foo:
    @classmethod
    def grab_column_locations(self, sheet):
        ...

然后你可以按如下方式调用它:

Foo.grab_column_locations(sheet)

但无论如何,这只是猜测,因为你没有提供太多细节。