首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >nose2与鼻子测试发现(nose2未找到测试)

nose2与鼻子测试发现(nose2未找到测试)
EN

Stack Overflow用户
提问于 2013-04-23 10:23:15
回答 2查看 3.8K关注 0票数 2

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

$ nose2 --详细

在0.000中运行了0次测试

好的

而鼻子却发现了所有的

$ nosetests -只收 ..

在0.004s中进行了33次测试

好的

否则,我可以从同一个目录使用nose2执行一个测试:

$ nose2 myproj.client.test.mypkg.mymodule_test 。

在0.007 s中进行1次测试

好的

其中myproj.client.test.mypkg.mymodule_test是这样的:

代码语言:javascript
复制
'''
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

EN

回答 2

Stack Overflow用户

发布于 2013-05-14 06:37:09

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

您可以通过两种方法解决这个问题:

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

在项目中的某个位置创建一个配置文件(基目录是一个很好的位置,也可以是运行nose2的地方)。nose2将查找和加载任何名为nose2.cfgunittest.cfg的文件。

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

代码语言:javascript
复制
[unittest]
test-file-pattern=*.py

现在再次运行nose2,它将找到那些旧的测试用例。我不确定这是否会对nose2性能产生不利影响,但到目前为止对我有好处。

重命名您的测试文件,以便它们以测试开始。

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

代码语言:javascript
复制
/tests/
      __init__.py
      fluxcapacitor.py

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

更详细的输出

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

票数 6
EN

Stack Overflow用户

发布于 2013-04-24 21:24:07

看起来,nose2需要三样东西中的一件才能找到测试:

  1. 您的测试需要放在包中(只需在测试结构的每个dir中创建__init__.py文件)
  2. 在运行nose2的同一目录中,需要一个名为“test”的目录。
  3. 它需要在同一个目录中

nose2 2的_discovery方法(在nose2.plugins.loader.discovery.py中)显式地查找名为“test”的目录或包的目录(如果它不只是从同一个目录中拾取您的测试文件):

代码语言:javascript
复制
            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‘并将文件移到那里,那么我会看到上面列出的问题:

代码语言:javascript
复制
Ran 0 tests in 0.000s

OK

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16166913

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档