프로그래밍 실력을 연마하고 연습하기 위해 Python에서 Project Euler의 문제를 해결하기위한 응용 프로그램을 작성하기로했습니다. 나는 유닛 테스트에 대한 경험이 없기 때문에 TDD의 도움을 받아 프로젝트를 만들고 그에 대한 경험을 얻기로 결정했습니다. 불행히도 기초를 구축하는 동안 Python3으로 프로그램을 실행했지만 Python2로 모든 유닛 테스트를 수행했습니다. 이제 Python3을 사용하여 테스트를 시도했지만 실패합니다.Unittest in Python 2 Python 3에서 작동하지 않습니다.
이전에는 파이썬으로 몇 가지 작은 스크립트를 작성하지 않았습니다. 나는이 프로젝트가 더 큰 것으로 예상하고 몇 가지 조사 후 나는 다음과 같은 프로젝트 구조를 사용하기로 결정, 그래서 또한 더 많은 파일을 포함합니다 :
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 평 다음 명령
#!/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)
작업을 수행
파이썬 -m 유닛 테스트에 발견
파이썬 -m 유닛 테스트는
하지 않습니다 다음은 tests.test_problems.
python3 -m 유닛 테스트는
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 유닛 테스트가
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'
나는 모든 종류의 옵션을 시도 tests.test_problems 발견,하지만 내 프로그램 또는 내 단위 테스트를 나누기. 이 문제를 일으키는 Python 2.7.13과 3.6.2의 차이점을 찾을 수 없습니다.
그 프로그램을 실행할 때 다음과 같은 메시지가 나타납니다 : ModuleNotFoundError : '__main __. euler'라는 모듈이 없습니다; '__main__'은 패키지가 아닙니다 – Matthieu
메인에'__init__'을 추가하려고합니다 – AndMar
어쨌든 문제는이 행이 구조와 설정에 달려 있습니다 – AndMar