2017-09-27 129 views
1

要掌握一些练习和编程技巧,我决定在Python中构建一个应用程序来解决Project Euler出现的问题。我没有单元测试的经验,所以我决定在TDD的帮助下构建我的项目,并获得一些经验。不幸的是,在建立基础时,我用Python3运行我的程序,但是用Python2做了所有的单元测试。现在我尝试使用Python3进行测试,但失败了。单元测试在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) 

下面的命令做的工作:
蟒蛇-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单元测试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

尝试在主 – AndMar

+0

中添加'__init__'无论如何,问题是n这一行,这取决于结构和设置 – AndMar