Designfrage für Configfile Klasse mit PyUnit
Verfasst: Mittwoch 2. Oktober 2013, 22:45
Hallo Leute,
ich versuch mich gerade mit PyUnit anzufreunden und wollte als Beispiel eine GUI, die ich mal programmiert habe, Refaktorieren und mit Unittests ausstatten...
Was ich in meinem Programm früher gemacht habe, sieht folgendermaßen aus:
Ich weiß jetzt nicht, ob das was ich da gemacht habe die feine englische Art ist, bin hier gerne für Verbesserungsvorschläge offen. Mein Programm hat zumindest Objekte erzeugt und ich hab nur einen Dateinamen übergeben, den Rest hat das Objekt selbst gemacht.
Ich will das gerade umbauen und auf ein IOError testen, wenn ich einen Dateinamen angebe, der nicht existiert, oder eben nicht lesbar ist. Mein Test sieht gerade mal so aus.
Der erste Test geht, weil ich ja einfach nur Teste ob ich den Dateinamen eben speichere und abfragen kann. Aber mein zweiter Test will nicht, und sagt "AttributeError: 'Test' object has no attribute 'checkFileReadable'"
Der neue Code sieht soweit so aus:
Der Test würde so oder so fehlschlagen, da ich ja den Fehler mit meinem Try Except abfange, aber selbst wenn ich das Kommentar mit dem open weg mache, dann bekomme ich mein IOError aber der Test ist Failed...
Also zum einen meine Frage, ist das ganze methode in der __init__ aufrufen ein bescheidenes Konzept, oder wie macht man das besser? Initialisiert man seine Objekt und iteriert danach noch mal drüber mein einem readCfgFile() oder sowas?
Würde mich über ein Feedback freuen, danke.
ich versuch mich gerade mit PyUnit anzufreunden und wollte als Beispiel eine GUI, die ich mal programmiert habe, Refaktorieren und mit Unittests ausstatten...
Was ich in meinem Programm früher gemacht habe, sieht folgendermaßen aus:
Code: Alles auswählen
class CfgFile():
'''the configfile object will read the config file and save all the
information within the object.
'''
def __init__(self,filename):
self.cfgfilename = filename
self.readCfgFile()
def readCfgFile(self):
'''will read the config file and save the information
into the object variables.
'''
fh = open(self.cfgfilename, 'r')
data = fh.readlines()
fh.close()
self.headerinfo = self.readHeadInfo(data)
self.formlist = self.readFormInfo(data)
Ich will das gerade umbauen und auf ein IOError testen, wenn ich einen Dateinamen angebe, der nicht existiert, oder eben nicht lesbar ist. Mein Test sieht gerade mal so aus.
Code: Alles auswählen
def testConfigFileInit(self):
testfile = "test/test.cfg"
myconffile = uguiconfigfile.ConfigFile(testfile)
self.assertEqual(myconffile.filename, testfile, "filename isn't saved correctly.")
self.assertRaises(IOError, uguiconfigfile.ConfigFile.__init__(self, "test"))
Der neue Code sieht soweit so aus:
Code: Alles auswählen
class ConfigFile():
def __init__(self, filename):
self.filename = filename
self.checkFileReadable()
#open(self.filename, "r")
def checkFileReadable(self):
try:
open(self.filename, "r")
except IOError:
print("File '%s' is not readable!" % (self.filename))
Also zum einen meine Frage, ist das ganze methode in der __init__ aufrufen ein bescheidenes Konzept, oder wie macht man das besser? Initialisiert man seine Objekt und iteriert danach noch mal drüber mein einem readCfgFile() oder sowas?
Würde mich über ein Feedback freuen, danke.