2017-09-27 21 views
1

私はプログラミングスキルを実践して仕事をするために、Project Eulerの問題を解決するためにPythonでアプリケーションを構築することにしました。私はユニットテストの経験がないので、私はTDDの助けを借りて自分のプロジェクトを構築し、その経験をいくつか得ることにしました。残念ながら、基盤を構築している間はPython3でプログラムを実行しますが、すべてのユニットテストはPython2で行いました。今私はPython3でテストをしようとすると失敗します。Unittest in Python 2 Python 3で動作しません

これまでは、Pythonでいくつかの小さなスクリプトを書いたことはありませんでした。初期化ファイルが空である

project_euler: 
    euler: 
    - __init__.py 
    - euler.py 
    - problems.py 
    tests: 
    - __init__.py 
    - test_euler.py 
    - test_problems.py 

:私は、このプロジェクトが大きくなるために、いくつかの研究の後、私は次のプロジェクト構造を使用することにしましたので、また、それはより多くのファイルが含まれていることを期待しています。

euler.py

#!/usr/bin/env python3 
# coding: utf-8 


class Euler: 
    def __init__(self): 
     pass 

problems.py

#!/usr/bin/env python3 
# coding: utf-8 

import sys 
import euler 


class ProjectEuler(euler.Euler): 
    def __init__(self): 
     pass 

test_euler.py

#!/usr/bin/env python3 
# coding: utf-8 

import unittest 
import euler.euler as euler 


class UnitTest(unittest.TestCase): 
    # a bunch of tests here 

if __name__ == '__main__': 
    unittest.main(module=None) 

test_problems .py次のコマンド

#!/usr/bin/env python3 
# coding: utf-8 

import unittest 
from euler import problems 


class UnitTest(unittest.TestCase): 
    # a bunch of tests here 

if __name__ == '__main__': 
    unittest.main(module=None) 

が作業を行います。
のpython -m unittestの発見
のpython -m unittestのは

ない以下はtests.test_problems。
のpython3 -m unittestのが

ImportError: Failed to import test module: tests.test_problems 
Traceback (most recent call last): 
    File "/usr/lib64/python3.6/unittest/loader.py", line 428, in _find_test_path 
    module = self._get_module_from_name(name) 
    File "/usr/lib64/python3.6/unittest/loader.py", line 369, in _get_module_from_name 
    __import__(name) 
    File "/home/me/code/project_euler/tests/test_problems.py", line 5, in <module> 
    import euler.problems as problems 
    File "/home/me/code/project_euler/euler/problems.py", line 8, in <module> 
    class ProjectEuler(euler.Euler): 
AttributeError: module 'euler' has no attribute 'Euler' 

のpython3 -m unittestのtests.test_problems

Traceback (most recent call last): 
    File "/usr/lib64/python3.6/runpy.py", line 193, in _run_module_as_main 
    "__main__", mod_spec) 
    File "/usr/lib64/python3.6/runpy.py", line 85, in _run_code 
    exec(code, run_globals) 
    File "/usr/lib64/python3.6/unittest/__main__.py", line 18, in <module> 
    main(module=None) 
    File "/usr/lib64/python3.6/unittest/main.py", line 94, in __init__ 
    self.parseArgs(argv) 
    File "/usr/lib64/python3.6/unittest/main.py", line 141, in parseArgs 
    self.createTests() 
    File "/usr/lib64/python3.6/unittest/main.py", line 148, in createTests 
    self.module) 
    File "/usr/lib64/python3.6/unittest/loader.py", line 219, in loadTestsFromNames 
    suites = [self.loadTestsFromName(name, module) for name in names] 
    File "/usr/lib64/python3.6/unittest/loader.py", line 219, in <listcomp> 
    suites = [self.loadTestsFromName(name, module) for name in names] 
    File "/usr/lib64/python3.6/unittest/loader.py", line 153, in loadTestsFromName 
    module = __import__(module_name) 
    File "/home/me/code/project_euler/tests/test_problems.py", line 5, in <module> 
    import euler.problems as problems 
    File "/home/mvrakking/code/project_euler/euler/problems.py", line 8, in <module> 
    class ProjectEuler(euler.Euler): 
AttributeError: module 'euler' has no attribute 'Euler' 

を発見し、私はオプションのすべての種類を試してみましたが、それは私のプログラムや私のユニットテストを破ります。私はこれを引き起こしているPython 2.7.13と3.6.2の違いを見つけることができません。

答えて

0

問題がファイルproblems.pyの行import eulerにあります。 from .euler import Euler

+0

このプログラムを実行すると、次のメッセージが表示されます。ModuleNotFoundError: '__main __。euler'という名前のモジュールはありません。 '__main__'はパッケージではありません – Matthieu

+0

メインに '__init__'を追加しようとしました – AndMar

+0

とにかく、問題はこの行です。それは構造と設定に依存します – AndMar

関連する問題