nose2 vs鼻子测试发现(nose2没有找到测试)

时间:2013-04-23 10:23:15

标签: python-2.7 nose nosetests

我刚开始一个python项目,我正在尝试不同的测试框架。 我遇到的问题是nose2找不到我的测试:

  

$ nose2 --verbose

     
     

在0.000秒内进行0次测试

     

而nosetests发现它们全部

  

$ nosetests - 仅收集

     

.................................

     
     

以0.004秒进行33次测试

     

好的

其他我可以在同一目录下使用nose2执行单个测试:

  

$ nose2 myproj.client.test.mypkg.mymodule_test

     

     
     

以0.007s进行1次测试

     

myproj.client.test.mypkg.mymodule_test就像:

'''
Created on 18/04/2013

@author: julia
'''
from unittest import TestCase, main
import os
from myproj.client.mymodule import SUT
from mock import Mock
import tempfile

class SUTTest(TestCase):
    def setUp(self):
        self.folder = tempfile.mkdtemp(suffix='myproj')
        self.sut = SUT(self.folder, Mock())
        self.sut.init()

    def test_wsName(self):
        myfolder = os.path.join(self.folder, 'myfolder')
        os.mkdir(myfolder)
        self.sut.change_dir(myfolder)
        self.assertEquals(self.SUT.name, 'myfolder')

if __name__ == "__main__":
    main()

我一直在查看文档,但我找不到可能的原因。

在MacOs 10.8.3上运行python 2.7.3

2 个答案:

答案 0 :(得分:6)

添加MichaelJCox的答案,另一个问题是,默认情况下,nose2正在寻找以'test'开头的测试文件名。换句话说,“testFilePattern == test*.py”(您可以在nose2/session.py中找到。)

您可以通过两种方式解决此问题:

在配置文件中指定不同的测试文件模式:

在项目的某处创建一个配置文件(基本目录是一个好地方,或者你将运行nose2的任何地方)。 nose2将查找并加载名为nose2.cfgunittest.cfg的任何文件。

将其添加到该配置文件中。

[unittest]
test-file-pattern=*.py

现在再次运行nose2,它会找到那些旧的测试用例。我不确定这是否会对nose2的表现产生负面影响或者是什么,但到目前为止对我来说是如此的好。

重命名测试文件,使其以测试开始。

例如,如果您有这样的项目:

/tests/
      __init__.py
      fluxcapacitor.py

/tests/fluxcapacitor.py重命名为/tests/test_fluxcapacitor.py,现在nose2将再次在fluxcapacitor.py中找到测试。

更详细的输出

最后,这与您的问题无关,但将来可能会有所帮助:如果-verbose没有输出足够的信息,您还可以传递以下额外的arg --log-level debug以获得更多输出。

答案 1 :(得分:3)

看起来nose2需要3件事中的一件才能找到测试:

  1. 您的测试需要在包中(只需在测试结构的每个目录中创建__init__.py文件)
  2. 您需要在运行nose2的同一目录中名为“test”的目录
  3. 它必须位于同一目录中
  4. nose2的_discovery方法(在nose2.plugins.loader.discovery.py中)显式查找名为'test'的目录或作为包的目录(如果它不是从同一目录中获取测试文件):

                if ('test' in path.lower()
                    or util.ispackage(entry_path)
                    or path in self.session.libDirs):
                    for test in self._find_tests(event, entry_path, top_level):
                        yield test
    

    如果我设置了一个类似的测试文件(名为tests.py)并在同一目录中运行nose2,它会给我1次测试OK。

    如果我创建一个名为'test'的目录,将文件移动到它,并从顶层目录运行nose2,我收到一条错误,指出它无法导入我的py文件。在该目录中创建__init__.py可修复该错误。

    如果我将目录设为'blah'并将文件移到那里,那么我会看到您在上面列出的问题:

    Ran 0 tests in 0.000s
    
    OK
    

    但是,如果我在目录'blah'中创建一个__init__.py,那么测试就会运行,我找到了我的1个测试并且确定了。