2016-08-06 9 views
-1

Ich versuche, einen Komponententest für eine Funktion innerhalb einer Klasse zu schreiben, aber ich habe ein kleines Problem. Vor dem Verschieben der Importfunktion in eine Klasse funktionierte dieser Test. Jetzt bekomme ich aber TypeError: grab_column_locations missing 1 required positional argument: 'sheet'. Die Importer-Funktion selbst wird korrekt analysiert sheet und funktioniert ordnungsgemäß, wenn das Programm ausgeführt wird, aber nicht beim Testen.Komponententest fehlgeschlagen nach Verschieben von Funktionen in eine Klasse

die Linie der Typeerror bis in der Einführer Funktion bezieht, ist:

columns = self.grab_column_locations(sheet) 

Der Test, ist hat versagt: passing

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 

So im Wesentlichen, wenn sie von einem Testlauf, importer nicht sheet bis grab_column_locations. Dies geschah erst, als ich diese beiden Funktionen in eine Klasse umstellte. Ich weiß, dass ich etwas kaputt gemacht habe, aber was?

+0

Wie ist Ihre Verzeichnisstruktur? Wie sieht die Funktion "grab_column_locations" aus? – Seekheart

Antwort

0

Die Fehlermeldung sagt dies:

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

Das klingt wie die Funktion Signatur:

def grab_column_locations(self, sheet): 

Rufst du es nicht von einer Instanz der Klasse diese Funktion zu besitzen?

Das heißt, wenn die Funktion gehört der Klasse Foo:

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

Die Fehlermeldung lässt mich denken, dass Sie die Funktion sind Aufruf wie folgt:

Foo.grab_column_locations(sheet) 

Wenn Sie sollten wirklich rufen Sie es an:

foo = Foo() 
foo.grab_column_locations(sheet) 

Alternativ könnte diese Funktion definiert werden ed als Klasse Methode, wenn Sie es zu einer Instanz zu binden, nicht wollen:

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

Dann können Sie es wie folgt nennen:

Foo.grab_column_locations(sheet) 

Aber wie auch immer, das ist nur Vermutung, da du nicht viele Details angegeben hast.