2017-02-14 5 views
1

Wenn ich versuche, setUpClass Methode zu verwenden, gibt es einen Fehler, das Attribut _cleanups nicht vorhanden ist in dem folgenden CodePython Unittest Hauptfunktion spöttische

@classmethod 
    def setUpClass(self): 
     self.argv = ['installation_tool.py'] 
     argv_patcher = patch.object(sys, 'argv', self.argv) 
     self.addCleanup(self, argv_patcher.stop) 
     self.argv_mock = argv_patcher.start() 
     self.all_bears = get_all_bears_names_from_PyPI() 

Aber, wenn ich setUp Methode verwenden, es funktioniert gut, und ich kann Argumente wie self.argv + = [asd, asda, asd] in anderen Methoden hinzufügen.

def setUp(self): 
     self.argv = ['installation_tool.py'] 
     argv_patcher = patch.object(sys, 'argv', self.argv) 
     self.addCleanup(argv_patcher.stop) 
     self.argv_mock = argv_patcher.start() 
     self.all_bears = get_all_bears_names_from_PyPI() 

Ich versuche, die Main-Funktion hier zu testen, also muss ich Spott getan werden. Wie sonst kann ich die Hauptfunktion testen?

Wie kann ich setUpClass dazu verwenden, weil ich die Methode setUp für andere Methoden verwenden muss, da sie eigene Startaufrufe haben?

Antwort

0

Sie übergeben "self" an setUpClass (das ist eine Klassenmethode) anstelle von "cls". Sie können in Klassenmethoden nicht self verwenden. Wenn Sie setUp (Instanzmethode) woanders verwenden möchten, können Sie Ihre Tests möglicherweise in verschiedenen Testfällen trennen (da jeder Testfall seine eigene Methode setUp haben kann) und den Test mit dem von Ihnen geschriebenen setUp ausführen, was korrekt ist. Gleiches gilt für setUpClass. Wenn Sie verschiedene setUp-Methoden definieren müssen, sollten Sie sich überlegen, Testfälle aufzuteilen.