我刚刚为我的一个Python模块添加了一个单元测试,鼻子拒绝接受。测试看起来像这样:
class TestMargin(unittest.TestCase):
def setUp(self):
super().setUp()
def test_margin(self):
self.assertTrue(False)
我希望这个测试失败,但似乎它甚至没有被接受。我正在使用--all-modules
标志运行鼻子,其他模块中的测试确实被拾取,所以它似乎不是鼻子的一般问题。我检查了鼻子的文件,看不出为什么这个测试不起作用的任何理由...
__init__.py
来解决问题。但为什么这会有所帮助?
答案 0 :(得分:4)
您的测试看起来不错,但您必须将其放在正确的文件名中,以便鼻子能够发现它。
您可以通过-vvv
默认情况下,nose会通过检查两件事来决定是否下降到目录结构中:它是一个包吗?如果是的话,鼻子将继续查看目录以进行更多测试。而a package in python表示拥有__init__.py
文件。这就是添加__init__.py
解决问题的原因。
如果目录不是包,那么鼻子可能仍然想要查看它,如果它看起来像一个测试目录,即tests
或它看起来像一个源目录,即src
或lib
。但我想情况并非如此。
任何与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 ls-files --stage | grep file_name
删除执行权限,然后提交
git update-index --chmod=-x file_path
如果存在svn属性,可以通过以下方式列出
svn proplist test_file_path
财产删除
svn propdel svn:executable test_file_path