使用nosetests时的AssertionError

时间:2013-11-27 06:00:41

标签: python nose assertions

在学习Python艰苦之路的练习48中,我被要求创建一个模块,由这个模块进行测试,lexicon_tests.py

from nose.tools import *
from ex48 import lexicon


def test_directions():
    assert_equal(lexicon.scan("north"), [('direction', 'north')])
    result = lexicon.scan("north south east")
    assert_equal(result, [('direction', 'north'),
                          ('direction', 'south'),
                          ('direction', 'east')])

def test_verbs():
    assert_equal(lexicon.scan("go"), [('verb', 'go')])
    result = lexicon.scan("go kill eat")
    assert_equal(result, [('verb', 'go'),
                          ('verb', 'kill'),
                          ('verb', 'eat')])


def test_stops():
    assert_equal(lexicon.scan("the"), [('stop', 'the')])
    result = lexicon.scan("the in of")
    assert_equal(result, [('stop', 'the'),
                          ('stop', 'in'),
                          ('stop', 'of')])


def test_nouns():
    assert_equal(lexicon.scan("bear"), [('noun', 'bear')])
    result = lexicon.scan("bear princess")
    assert_equal(result, [('noun', 'bear'),
                          ('noun', 'princess')])

def test_numbers():
    assert_equal(lexicon.scan("1234"), [('number', 1234)])
    result = lexicon.scan("3 91234")
    assert_equal(result, [('number', 3),
                          ('number', 91234)])


def test_errors():
    assert_equal(lexicon.scan("ASDFADFASDF"), [('error', 'ASDFADFASDF')])
    result = lexicon.scan("bear IAS princess")
    assert_equal(result, [('noun', 'bear'),
                          ('error', 'IAS'),
                          ('noun', 'princess')])

所以我创建了模块lexicon.py,在这里进行测试:

def scan(words):
    directions = ['north', 'south', 'east', 'west', 'down', 'up', 'left', 'right', 'back']
    verbs = ['go', 'stop', 'kill', 'eat']
    stop_words = ['the', 'in', 'of', 'from', 'at', 'it']
    nouns = ['door', 'bear', 'princess', 'cabinet']


    lex = words.split()
    list1 = []

    for i in lex:
        if i in directions:
            list1.append(('direction', i))
        elif i in verbs:
            list1.append(('verb', i))
        elif i in stop_words:
             list1.append(('stop-word', i))
        elif i in nouns:
            list1.append(('noun', i))
        elif i.isdigit():
            list1.append(('number', convert_number(i)))
        else:
            list1.append(('error', i))
    print list1 

def convert_number(s):
    try:
        return int(s)

    except ValueError:
        return None

然而,当我在powershell中运行nosetests时,我得到了这个AssertionError:

Traceback (most recent call last):
  File "G:\Python27\lib\site-packages\nose\case.py", line 197, in runTest
    self.test(*self.arg)
  File        "G:\Users\Charles\dropbox\programming\lexicon_test\skeleton\tests\lexicon_tests.py", line   6, in test_directions
    assert_equal(lexicon.scan("north"), [('direction', 'north')])
AssertionError: None != [('direction', 'north')]
-------------------- >> begin captured stdout << ---------------------
[('direction', 'north')]

这是我为每次测试运行获得的相同错误消息,其中六个用于lexicon_tests.py中的六个函数。这个错误是什么意思?一段时间以来一直很烦人。提前致谢。

1 个答案:

答案 0 :(得分:4)

assert_equal函数接受两个参数,如果参数彼此不相等则抛出错误。在这种情况下,lexicon.scan("north")的结果为None,由于这不等于[('direction', 'north')],因此会抛出错误。

换句话说,您的lexicon.scan功能无法正常运行。它可能与它缺少return语句有关。