私はプログラミングスキルを実践して仕事をするために、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の違いを見つけることができません。
このプログラムを実行すると、次のメッセージが表示されます。ModuleNotFoundError: '__main __。euler'という名前のモジュールはありません。 '__main__'はパッケージではありません – Matthieu
メインに '__init__'を追加しようとしました – AndMar
とにかく、問題はこの行です。それは構造と設定に依存します – AndMar