2013-07-22 13 views
7
definiert

Ich verfolge die harte Tour lernen Python und ich bin auf Übung 47 - Automatisiertes Testen (http://learnpythonthehardway.org/book/ex47.html)Python Nameerror: global name ‚assertEqual‘ ist nicht

Ich verwende Python3 (vs die Verwendung des Buches Python 2.x) und ich stelle fest, dass assert_equals (das im Buch verwendet wird) veraltet ist. Ich benutze assertEqual.

Ich versuche, einen Testfall zu bauen, aber aus irgendeinem Grund, wenn nosetests in cmd, erhalte ich die Fehlermeldung: NameError: global name 'assertEqual' is not defined

Hier ist der Code:

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) 

Ich habe versucht, die Suche GitHub für irgendwelche Lösungen, und ich bin nur nicht sicher, warum es mir den NameError gibt und wie würde ich es beheben.

+12

Ist das nicht 'assertEqual' Teil Unittest? Die Nase verwendet immer noch 'assert_equal'. – Blender

+1

Wow, du hast Recht. Ich habe 'assertEqual' in' assert_equal' geändert, wie du es gesagt hast und es funktioniert einwandfrei. Vielen Dank! – auro

Antwort

3

assertEqual ist eine Methode der unittest.TestCase Klasse, daher können Sie sie nur für Objekte verwenden, die von dieser Klasse erben. Überprüfen Sie the unittest documentation.

+1

Die Probe verwendet Nase, nicht Unit-Test. – Fredrik

+0

genau der Grund für den NameError. nose.tools hat keine assertEqual-Funktion – Joop

+5

Sicher, aber eine Frage zu beantworten, indem man auf die Dokumente für eine Bibliothek zeigt, die er nicht benutzt, anstatt auf die Dokumente für die Bibliothek zu zeigen, die er benutzt, schlägt mich etwas zurück ... – Fredrik

1

Hatte ein ähnliches Problem mit dem zweiten Modul in einem Python Selen Testskript. Gelöst es, indem du 'Selbst' miteinschließt. vor dem 'assertIn'.

Vorher:

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

Nach:

self.assertIn('images/checkbox-checked.png', webelement) 
Verwandte Themen