2013-07-22 10 views
7

Obserwuję Dowiedz Pythona trudna droga i jestem na ćwiczenia 47 - Automated Testing (http://learnpythonthehardway.org/book/ex47.html)Python NameError: globalna nazwa 'assertEqual' nie jest zdefiniowane

Używam Python3 (vs użytku z książki Python 2.x) i zdaję sobie sprawę, że assert_equals (który jest używany w książce) jest przestarzałe. Używam assertEqual.

Próbuję zbudować przypadek testowy, ale z jakiegoś powodu, podczas korzystania nosetests cmd, pojawia się błąd: NameError: global name 'assertEqual' is not defined

Oto kod:

from nose.tools import * 
from ex47.game import Room 



def test_room(): 
    gold = Room("GoldRoom", 
     """ This room has gold in it you can grab. There's a 
      door to the north. """) 
    assertEqual(gold.name, "GoldRoom") 
    assertEqual(gold.paths, {}) 

def test_room_paths(): 
    center = Room("Center", "Test room in the center.") 
    north = Room("North", "Test room in the north.") 
    south = Room("South", "Test room in the south.") 

    center.add_paths({'north': north, 'south': south}) 
    assertEqual(center.go('north'), north) 
    assertEqual(center.go('south'), south) 

def test_map(): 
    start = Room("Start", "You can go west and down a hole") 
    west = Room("Trees", "There are trees here. You can go east.") 
    down = Room("Dungeon", "It's dark down here. You can go up.") 

    start.add_paths({'west': west, 'down': down}) 
    west.add_paths({'east': start}) 
    down.add_paths({'up': start}) 

    assertEqual(start.go('west'), west) 
    assertEqual(start.go('west').go('east'), start) 
    assertEqual(start.go('down').go('up'), start) 

Próbowałem szukając GitHub dla wszelkich rozwiązań, i nie jestem po prostu pewny, dlaczego to daje mi NameError i jak mam go naprawić.

+12

nie jest 'assertEqual' część unittest? nos nadal używa 'assert_equal'. – Blender

+1

Wow masz rację. Właśnie zmieniłem 'assertEqual' na' assert_equal', tak jak powiedziałeś i działa bezbłędnie. Dziękuję Ci! – auro

Odpowiedz

3

assertEqual jest metodą klasy unittest.TestCase, więc można jej używać tylko na obiektach dziedziczących z tej klasy. Sprawdź the unittest documentation.

+1

Próbka wykorzystuje nos, a nie test jednostkowy. – Fredrik

+0

dokładnie powód NameError. nose.tools nie mają funkcji assertEqual – Joop

+5

Oczywiście, odpowiadanie na pytanie przez wskazywanie dokumentów dla biblioteki, której nie używa zamiast wskazywania dokumentów dla biblioteki, której używa, uderza mnie trochę wstecz ... – Fredrik

1

Miał podobny problem z drugim modułem w skrypcie testowym selonu. Rozwiązał to, włączając w to "self". przed "asertIn".

Przed:

assertIn('images/checkbox-checked.png', ET) 

Po:

self.assertIn('images/checkbox-checked.png', webelement) 
Powiązane problemy