Python enthält unittest im Standardmodul, aber ich wusste nicht sofort, wie ich es verwenden soll. Daher behalte ich die Vorlage als Memorandum, damit ich sie kopieren und in andere Projekte einfügen kann.
*Vorsichtsmaßnahmen
Ab python2.7 kann unittest setUpClass und tearDownClass verwenden, die ausgeführt werden, wenn die Testklasse initialisiert wird. Für Python2.6 und niedriger können Sie diese Methoden verwenden, indem Sie ein Modul namens unittest2 importieren.
Punkt
# -*- coding: utf-8 -*-
import os, sys, unittest
class Sample():
"""Zu testende Klasse"""
#Zu testende Methode
def return_hoge(self):
return 'hoge'
#Zu testende Methode
def return_poyo(self):
return 'poyo'
class SampleTest(unittest.TestCase):
"""Eine Testklasse, die eine Klasse testet"""
CLS_VAL = 'none'
#Wird nur einmal aufgerufen, wenn die Testklasse initialisiert wird(python2.7 oder mehr)
@classmethod
def setUpClass(cls):
if sys.flags.debug: print('> setUpClass method is called.')
#Führen Sie umfangreiche Verarbeitungsmethoden aus, um sich auf das Testen vorzubereiten
cls.CLS_VAL = '> setUpClass : initialized!'
if sys.flags.debug: print(cls.CLS_VAL)
#Wird nur einmal aufgerufen, wenn die Testklasse freigegeben wird(python2.7 oder mehr)
@classmethod
def tearDownClass(cls):
if sys.flags.debug: print('> tearDownClass method is called.')
#Geben Sie das von setUpClass vorbereitete Objekt frei
cls.CLS_VAL = '> tearDownClass : released!'
if sys.flags.debug: print(cls.CLS_VAL)
#Wird jedes Mal aufgerufen, wenn Sie eine Testmethode ausführen
def setUp(self):
if sys.flags.debug: print(os.linesep + '> setUp method is called.')
#Führen Sie einen leichten Prozess durch, um sich auf den Test vorzubereiten
self.smpl = Sample()
#Wird nach jeder Ausführung der Testmethode aufgerufen
def tearDown(self):
if sys.flags.debug: print(os.linesep + '> tearDown method is called.')
#Geben Sie das von setUp vorbereitete Objekt frei
def test_hoge(self):
expected = 'hoge'
actual = self.smpl.return_hoge()
self.assertEqual(expected, actual)
def test_poyo(self):
expected = 'poyo'
actual = self.smpl.return_hoge() #Häufiger Fehler
self.assertEqual(expected, actual)
if __name__ == '__main__':
#Lauf unittest
unittest.main()
Setzen Sie das Flag -d, wenn Sie ein Python-Skript ausführen, um in den Debug-Modus zu wechseln. (sys.flags.debug wird wahr sein.)
python -d /Users/you/Desktop/sample.py
> setUpClass method is called.
> setUpClass : heavy method
> setUp method is called.
> tearDown method is called.
.
> setUp method is called.
F
> tearDown method is called.
> tearDownClass method is called.
> tearDownClass : released
======================================================================
FAIL: test_poyo (__main__.SampleTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/Users/you/Desktop/sample.py", line 54, in test_poyo
self.assertEqual(expected, actual)
AssertionError: 'poyo' != 'hoge'
----------------------------------------------------------------------
Ran 2 tests in 0.001s
FAILED (failures=1)
Ausgabe, wenn nicht im Debug-Modus
python /Users/you/Desktop/sample.py
.F
======================================================================
FAIL: test_poyo (__main__.SampleTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/Users/you/Desktop/sample.py", line 54, in test_poyo
self.assertEqual(expected, actual)
AssertionError: 'poyo' != 'hoge'
----------------------------------------------------------------------
Ran 2 tests in 0.000s
FAILED (failures=1)
Appendix
Ich glaube nicht, dass es in kleinen Skripten häufig verwendet wird, aber wenn Sie es brauchen, gibt es auch eine Initialisierungsmethode für jedes Modul wie setUpModule.
Recommended Posts