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

时间:2015-06-30 10:54:10

标签: python nose

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

class TestMargin(unittest.TestCase):

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

    def test_margin(self):
        self.assertTrue(False)

我希望这个测试失败,但似乎它甚至没有被接受。我正在使用--all-modules标志运行鼻子,其他模块中的测试确实被拾取,所以它似乎不是鼻子的一般问题。我检查了鼻子的文件,看不出为什么这个测试不起作用的任何理由...

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

2 个答案:

答案 0 :(得分:4)

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

您可以通过-vvv

运行鼻子的内部工作

默认情况下,nose会通过检查两件事来决定是否下降到目录结构中:它是一个包吗?如果是的话,鼻子将继续查看目录以进行更多测试。而a package in python表示拥有__init__.py文件。这就是添加__init__.py解决问题的原因。

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

查看nose usage documentation

  

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

另外,鼻子只是一堆python文件,所以你总是可以查看代码,看看它是如何发现测试的。在这种情况下,您可能需要查看selector.py

中的wantDirectory()方法

答案 1 :(得分:0)

如果命名正确,但仍未选择静止文件,则可能的原因之一是测试文件对其具有可执行权限-rwxrwxr-x。将权限修改为-rw-rw-r--。 Python Nose不会选择具有可执行权限的文件。

如果将可执行标志错误地添加到版本控制中,请按照以下说明删除权限

Git

通过以下方式查找权限

git ls-files --stage | grep file_name

删除执行权限,然后提交

git update-index --chmod=-x file_path

SVN

如果存在svn属性,可以通过以下方式列出

svn proplist test_file_path

财产删除

svn propdel svn:executable test_file_path