2013-02-14 26 views
11

Ich habe mich nur gefragt, wie ich testen würde für eine Funktion, die nichts zurückgibt. zum Beispiel sagen, ich habe diese Funktion:unittest für keinen Typ in Python?

def is_in(char): 
    my_list = [] 
    my_list.append(char) 

und dann, wenn ich es testen war:

class TestIsIn(unittest.TestCase): 

    def test_one(self): 
    ''' Test if one character was added to the list''' 
    self.assertEqual(self.is_in('a'), and this is where I am lost) 

Ich weiß nicht, was die Funktion gleich, zu behaupten, da keine ist Rückgabewert, den ich mit vergleichen könnte.

EDIT: würde assertIn Arbeit?

Antwort

4

Der Punkt eines Komponententests ist, etwas zu testen, das die Funktion tut. Wenn es keinen Wert zurückgibt, was macht es eigentlich? In diesem Fall scheint es nichts zu tun, da my_list eine lokale Variable ist, aber wenn Sie Ihre Funktion so etwas wie dies tatsächlich aussieht:

def is_in(char, my_list): 
    my_list.append(char) 

Dann würden Sie testen wollen, ob char tatsächlich angehängt wird Die Liste. Ihr Test wäre:

def test_one(self): 
    my_list = [] 
    is_in('a', my_list) 
    self.assertEqual(my_list, ['a']) 

Da die Funktion keinen Wert zurückgibt, gibt es keinen Punkt Prüfung für sie (es sei denn, Sie müssen sicherstellen, dass es keinen Wert zurückgibt).

20

Alle Python-Funktionen geben etwas zurück. Wenn Sie keinen Rückgabewert angeben, wird None zurückgegeben. Also, wenn Ihr Ziel wirklich, um sicherzustellen, dass etwas nicht einen Wert zurückgibt, können Sie einfach sagen

self.assertIsNone(self.is_in('a')) 

(Dies ist jedoch nicht zwischen einer Funktion ohne einen expliziten Rückgabewert und eine, die return None tut unterscheiden kann .)