Python:鼻子没有接受新的测试

Ann*_*nne 4 python nose

我刚刚在我的一个 Python 模块中添加了一个单元测试,但鼻子拒绝接受。测试看起来像这样:

class TestMargin(unittest.TestCase):

    def setUp(self):
        super().setUp()

    def test_margin(self):
        self.assertTrue(False)
Run Code Online (Sandbox Code Playgroud)

我希望这个测试失败,但似乎它甚至没有被接受。我正在用--all-modules标志运行鼻子,其他模块中的测试确实被选中,所以它似乎不是鼻子的通用问题。我已经检查了鼻子的文档,但看不出为什么这个测试不应该工作的任何充分理由......

编辑:我通过(有点随意)__init__.py在模块级别添加一个空来解决这个问题。但这为什么会有帮助?

Ole*_*siy 6

您的测试看起来不错,但是您必须将它放在正确文件名中的正确位置,以便鼻子发现它。

你可以通过运行它来看到鼻子的内部工作 -vvv

默认情况下,鼻子通过检查两件事来决定是否下降到您的目录结构:它是一个包吗?如果是,nose 将继续查看目录以进行更多测试。在 python 中作为一个包意味着拥有__init__.py文件。这就是为什么添加__init__.py解决了这个问题。

如果目录不是包,nose 可能仍要查看它,如果它看起来像一个测试目录,即,tests或者它看起来像一个源目录,即srclib. 但我想情况并非如此。

看看鼻子使用文档

任何与 testMatch 正则表达式(默认情况下:(?:^|[b_.-])[Tt]est)匹配的 python 源文件、目录或包都将被收集为测试(或测试集合的源)。此外,将检查在工作目录中找到的所有其他包,以查找与 testMatch 匹配的 python 源文件或目录。包发现一直沿树向下,因此 package.tests 和 package.sub.tests 和 package.sub.sub2.tests 都将被收集。

此外,nose 只是一堆 python 文件,因此您可以随时查看代码以了解它如何发现测试。在这种情况下,您可能需要查看selector.py 中的 wantDirectory()方法