Python 为什么赢了';t unittest找到我的测试。py?

Python 为什么赢了';t unittest找到我的测试。py?,python,unit-testing,Python,Unit Testing,我很高兴地为我正在使用的API编写和测试模块,并使用以下命令: python -m unittest myAPI.tests.APITests.test_mod_to_test 正如预期的那样,我的测试位于模块myAPI中的tests.py中。这工作得很好,我发现我必须在保存我正在测试的函数的api.py文件中重构一些代码。我更改了需要更改的内容,然后返回到命令行,通过向上按键盘来保存键入,运行完全相同的命令。我得到了这个错误: AttributeError: 'module' object

我很高兴地为我正在使用的API编写和测试模块,并使用以下命令:

python -m unittest myAPI.tests.APITests.test_mod_to_test 
正如预期的那样,我的测试位于模块
myAPI
中的
tests.py
中。这工作得很好,我发现我必须在保存我正在测试的函数的
api.py
文件中重构一些代码。我更改了需要更改的内容,然后返回到命令行,通过向上按键盘来保存键入,运行完全相同的命令。我得到了这个错误:

AttributeError: 'module' object has no attribute 'tests' 
当我甚至没有更改目录中的任何内容或
tests.py
时。我没有移动文件或更改命令,我可以使用以下方法在python shell中导入
tests.py
文件:

from myAPI import tests
在此之后,我进入:

print tests
输出是预期的:

<module 'myAPI.tests' from '/path/to/myAPI/tests.pyc'>

我在virtualenv中使用Python2.7,但实际上没有安装任何东西。该应用程序适用于django 1.2.1应用程序,但与此无关,因为我在测试期间没有接触django(安装在我的环境中的除外)


这让我很困惑,我想如果我不更改目录或tests.py中的一些内容,它是如何从工作状态变为不工作的。任何帮助都是非常感谢的。

我可以为这个错误提出两个可能的原因,但是没有更多的信息就无法知道

  • 您从错误的位置运行测试。您没有说明运行“python-m unittest myAPI.tests.APITests.test\u mod\u to\u test”的位置。如果从目录myAPI中运行它,可能会导致奇怪的故障,因为您无法访问目录myAPI中的
    \uuuu init\uuuuuuuuuuupy
    文件。因此,您需要确保从包含myAPI测试的目录运行该调用

  • 您的“tests”目录中没有
    \uuu init\uu.py
    文件。创建新目录时,很容易忘记放入一个目录。没有它,您将无法从目录中导入任何内容