2016-01-23 3 views
2

Когда я делаю простой тест с unittest, он не показывает никаких ошибок. Но когда я пытаюсь nosetests мои тестовые файлы, он делает ImportError. Вот краткие сведения.nosetests делает другой вывод (ImportError), а затем простой unittest (No Error). Почему?

Структура проекта:

-rwxrwxr-x __init__.py 
-rw-rw-r-- __init__.pyc 
drwxrwxr-x romannumeralconverter 
drwxrwxr-x tests 

./romannumeralconverter: 
-rwxrwxr-x __init__.py 
-rw-rw-r-- __init__.pyc 
-rwxrwxr-x romannumeralconverter.py 
-rw-rw-r-- romannumeralconverter.pyc 

./tests: 
-rwxrwxr-x __init__.py 
-rw-rw-r-- __init__.pyc 
-rw-rw-r-- romannumeralconvertertest.py 
-rw-rw-r-- romannumeralconvertertest.pyc 

TestFile - romannumeralconvertertest.py:

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 

import unittest 
from romannumeralconverter.romannumeralconverter import RomanNumeralConverter 

class RomanNumeralConverterTest(unittest.TestCase): 
    def test_parsing_millenia(self): 
     """Testing if millenia""" 
     value = RomanNumeralConverter("M") 
     self.assertEquals(1000, value.convert_to_decimal()) 

    #@unittest.skip("demonstrating skipping") 
    def test_parsing_century(self): 
     value = RomanNumeralConverter("C") 
     self.assertEquals(100, value.convert_to_decimal()) 

    def test_parsing_half_century(self): 
     value = RomanNumeralConverter("L") 
     self.assertEquals(50, value.convert_to_decimal()) 

if __name__ == "__main__": 
    suite = unittest.TestLoader().loadTestsFromTestCase(RomanNumeralConverterTest) 
    unittest.TextTestRunner(verbosity=3).run(suite) 

Appfile: - romannumeralconverter.py:

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 

class RomanNumeralConverter(object): 
    def __init__(self, roman_numeral): 
     self.roman_numeral = roman_numeral 
     self.digit_map = {"M": 1000, "D": 500, "C": 100, "L": 50, "X": 10, "V": 5, "I": 1} 
     self.i_rule = ('V','X') 
     self.x_rule = ('L','C') 
     self.c_rule = ('D','M') 
     self.rules = {"I": self.i_rule, "X": self.x_rule, "C": self.c_rule} 

    def zwei_convert_to_decimal(self): 
     val = 0 
     oldelement = 0 
     for char in self.roman_numeral: 
      if oldelement != 0 and self.digit_map[char] > self.digit_map[oldelement]: 
       pass 
      oldelement = char 

    def convert_to_decimal(self): 
     val = 0 
     for char in self.roman_numeral: 
      val += self.digit_map[char] 
     return val 

Нормальный выход теста:

▶ python romannumeralconvertertest.py 
test_parsing_century (__main__.RomanNumeralConverterTest) ... ok 
test_parsing_half_century (__main__.RomanNumeralConverterTest) ... ok 
test_parsing_millenia (__main__.RomanNumeralConverterTest) 
Testing if millenia ... ok 

---------------------------------------------------------------------- 
Ran 3 tests in 0.000s 

OK 

nosetests выход:

▶ nosetests romannumeralconvertertest.py 
E 
====================================================================== 
ERROR: Failure: ImportError (cannot import name RomanNumeralConverter) 
---------------------------------------------------------------------- 
Traceback (most recent call last): 
    File "/usr/lib/python2.7/dist-packages/nose/loader.py", line 420, in loadTestsFromName 
    addr.filename, addr.module) 
    File "/usr/lib/python2.7/dist-packages/nose/importer.py", line 47, in importFromPath 
    return self.importFromDir(dir_path, fqname) 
    File "/usr/lib/python2.7/dist-packages/nose/importer.py", line 94, in importFromDir 
    mod = load_module(part_fqname, fh, filename, desc) 
    File "/home/username/Development/learning/romannumeralconverter/tests/romannumeralconvertertest.py", line 5, in <module> 
    from romannumeralconverter.romannumeralconverter import RomanNumeralConverter 
ImportError: cannot import name RomanNumeralConverter 

---------------------------------------------------------------------- 
Ran 1 test in 0.000s 

FAILED (errors=1) 

sys.path

/home/username/Development/learning/romannumeralconverter/tests 
/home/username/Development/learning/romannumeralconverter/tests 
/home/username/Development/learning/romannumeralconverter 
/usr/lib/python2.7 
/usr/lib/python2.7/plat-x86_64-linux-gnu 
/usr/lib/python2.7/lib-tk 
/usr/lib/python2.7/lib-old 
/usr/lib/python2.7/lib-dynload 
/home/username/.local/lib/python2.7/site-packages 
/usr/local/lib/python2.7/dist-packages 
/usr/lib/python2.7/dist-packages 
/usr/lib/python2.7/dist-packages/gtk-2.0 
/usr/lib/python2.7/dist-packages/ubuntu-sso-client 
+1

Вы можете предоставить вывод 'sys.path'? –

+0

Я включил sys.path в сообщение. У вас есть ключ? – user2502106

ответ

1

По умолчанию нос делает некоторые коррективы в sys.path. Существует одно возможное решение, которое вы можете найти здесь: Accepted answer of - Python Nose Import Error.

Из вашей структуры проекта, если вы удалите __init__.py из:

/home/username/Development/learning/romannumeralconverter 

каталог, он должен работать.

+0

Спасибо, что это решение, оно работает! – user2502106

 Смежные вопросы

  • Нет связанных вопросов^_^