2013-02-14 20 views
11

Zastanawiam się, w jaki sposób sprawdziłbym funkcję, która niczego nie zwraca. na przykład, że mam tę funkcję:unittest for none type w python?

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

a następnie gdybym go przetestować:

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) 

ja nie wiem, co twierdzą, funkcja ta jest równa, ponieważ tam nie ma wartość zwracana, którą mogę porównać z .

EDYCJA: czy w pracy byłaby asertywna?

Odpowiedz

4

Celem testu jednostkowego jest sprawdzenie, czy funkcja działa. Jeśli nie zwraca wartości, to co właściwie robi? W tym przypadku, to nie wydaje się być cokolwiek, od my_list jest zmienna lokalna, ale jeśli funkcja faktycznie wyglądał mniej więcej tak:

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

Wtedy chcesz sprawdzić, czy rzeczywiście jest char dołączane do Lista. Test będzie:

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

Ponieważ funkcja nie zwraca wartości, nie ma dla niego punkt badania (chyba że trzeba upewnić się, że nie zwraca wartość).

20

Wszystkie funkcje Pythona zwracają coś. Jeśli nie podasz wartości zwracanej, zwracana jest wartość None. Tak więc, jeśli celem jest naprawdę, aby upewnić się, że coś nie zwraca wartości, można po prostu powiedzieć

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

(to jednak nie można odróżnić funkcję bez wyraźnej wartości zwracanej i jeden, który robi return None .)