2017-09-27 12 views
1

프로그래밍 실력을 연마하고 연습하기 위해 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의 차이점을 찾을 수 없습니다.

답변

0

문제가있는 파일 problems.pyimport euler입니다. from .euler import Euler

+0

그 프로그램을 실행할 때 다음과 같은 메시지가 나타납니다 : ModuleNotFoundError : '__main __. euler'라는 모듈이 없습니다; '__main__'은 패키지가 아닙니다 – Matthieu

+0

메인에'__init__'을 추가하려고합니다 – AndMar

+0

어쨌든 문제는이 행이 구조와 설정에 달려 있습니다 – AndMar