为什么不能通过unittest找到我的tests.py?

时间:2012-11-16 20:41:20

标签: python unit-testing

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

python -m unittest myAPI.tests.APITests.test_mod_to_test 

正如预期的那样,我的测试位于模块tests.py中的myAPI。这工作得很好,我发现我必须在我的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中使用python 2.7并且没有真正安装在其中。该应用程序适用于django 1.2.1应用程序但不相关,因为我在测试期间没有触摸django(除了它安装在我的环境中)。

这让我感到困惑,我想到了如何从伟大的工作变为现实,并且没有我改变目录或tests.py中的一些。任何帮助都非常感谢。

1 个答案:

答案 0 :(得分:1)

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

  1. 您正在从错误的地方运行测试。你没有说明你在哪里运行“python -m unittest myAPI.tests.APITests.test_mod_to_test”。如果从myAPI目录中运行它,则最终会出现奇怪的故障,因为您无法访问myAPI目录中的__init__.py文件。因此,您需要确保从包含myAPI测试的目录运行该调用。

  2. 您的'tests'目录中没有__init__.py个文件。当你创建一个新目录时,很容易忘记输入一个。没有它,您将无法从目录中导入任何内容。