Voici une partie du test unitaire:Je ne comprends pas comment ce test unitaire échoue
from nose.tools import *
from testing import *
def test_directions():
assert_equal(scan("north"), [('direction', 'north')])
result = scan("north south east")
assert_equal(result, [('direction', 'north'), ('direction', 'south'), ('direction', 'east')])
Et voici mon code:
import string
def convert_number(s):
try:
return int(s)
except ValueError:
return None
def scan(s):
direction_words= ("north", "south", "east", "west", "down", "up", "left", "right", "back", "forwards", "backwards")
verbs= ("go", "stop", "kill", "eat", "shoot", "run", "hide", "dodge")
stop_words= ("the", "in", "of", "from", "at", "it")
nouns= ("door", "bear", "princess", "cabinet", "gold", "money", "chest", "gun", "sword")
numbers= s.split()
i=0
j=0
g=0
m=0
a=0
b=0
while a < len(numbers):
if type(convert_number(numbers[a])) == int:
print [('number', int(numbers[a]))]
a += 1
else:
a += 1
while i < len(direction_words):
if direction_words[i] in s.split():
s= string.lower(s)
print [('direction', direction_words[i]) ]
i+=1
else:
i+=1
while j < len(verbs):
if verbs[j] in s.split():
s= string.lower(s)
print [('verb', verbs[j])]
j+=1
else:
j+=1
while g < len(stop_words):
if stop_words[g] in s.split():
s= string.lower(s)
print [('stop', stop_words[g])]
g+=1
else:
g+=1
while m < len(nouns):
if nouns[m] in s.split():
s= string.lower(s)
print [('noun', nouns[m])]
m+=1
else:
m+=1
while b< len(s.split()):
if numbers[b] not in nouns:
if numbers[b] not in stop_words:
if numbers[b] not in verbs:
if numbers[b] not in direction_words:
if type(convert_number(numbers[b])) != int:
print [('error', numbers[b])]
b += 1
else:
b+=1
else: b+=1
else: b+=1
else: b+=1
else: b+=1
else:
return
Quand je lance les tests unitaires ici est ce que je reçois:
F
======================================================================
FAIL: tests.ex48_tests.test_directions
----------------------------------------------------------------------
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/nose/case.py", line 197, in runTest
self.test(*self.arg)
File "/Users/Adam/Desktop/projects/ex48/tests/ex48_tests.py", line 6, in test_directions
assert_equal(scan("north"), [('direction', 'north')])
AssertionError: None != [('direction', 'north')]
-------------------- >> begin captured stdout << ---------------------
[('direction', 'north')]
--------------------- >> end captured stdout << ----------------------
----------------------------------------------------------------------
Ran 1 test in 0.015s
FAILED (failures=1)
Je ne comprends pas comment le test échoue. Quand je lance le programme dans le terminal, il produit exactement le même résultat que dans les tests unitaires. Je ne comprends pas pourquoi ça ne passe pas.
Awesome prend tout son sens. J'ai dû changer les tests parce que maintenant le résultat de la fonction scan est dans l'ordre des tuples que j'ai créés au lieu de l'ordre de la phrase. Ne pensez pas que cela fera une différence. – Adam
Cool. Si l'ordre des valeurs de retour n'est pas important (ex, si '('direction', 'north'), ('direction', 'south')]' est aussi valide que '['' direction ', 'sud'), ('direction', 'nord')] '), alors vous pouvez utiliser [' set' intégré] (http://docs.python.org/library/sets.html) ([Wikipedia] ] (http://en.wikipedia.org/wiki/Set_ (computer_science))) lorsque vous comparez les listes. Ex: 'assert_equal (set (résultat), set ([('direction', 'north'), ...])'. Cela fonctionnera car les ensembles sont non ordonnés, donc 'set ([1,2,3]) == set ([3,2,1]) '. –