如何在具有nosetests的文件中指定单个测试?

时间:2012-07-02 00:26:29

标签: python testcase nosetests

我有一个名为test_web.py的文件,其中包含一个TestWeb类和许多名为test_something()的方法。

我可以像这样在课堂上运行每个测试:

$ nosetests test_web.py 
...
======================================================================
FAIL: checkout test
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/me/path/here/test_web.py", line 187, in test_checkout
...

但我似乎无法进行个别测试。当在相同的PWD中运行时,这些给我“没有这样的测试”错误:

$ nosetests test_web.py:test_checkout
$ nosetests TestWeb:test_checkout

这里可能有什么问题?

6 个答案:

答案 0 :(得分:129)

您必须这样指定:nosetests <file>:<Test_Case>.<test_method>

nosetests test_web.py:TestWeb.test_checkout

请参阅the docs

答案 1 :(得分:16)

您还可以指定一个模块:

nosetests tests.test_integration:IntegrationTests.test_user_search_returns_users

答案 2 :(得分:9)

在命令行上指定名称与其他答案建议一样有效并且很有用。但是,当我正在编写测试时,我经常发现我只想运行我正在进行的测试,并且我必须在命令行上编写的名称变得非常冗长而且编写起来很麻烦。在这种情况下,我更喜欢使用自定义装饰器和标志。

我定义wipd(“正在进行装饰工作”),如下所示:

from nose.plugins.attrib import attr
def wipd(f):
    return attr('wip')(f)

这定义了一个装饰器@wipd,它将在它装饰的对象上设置wip属性。例如:

import unittest
class Test(unittest.TestCase):

    @wipd
    def test_something(self):
        pass

然后可以在命令行中使用-a wip将测试的执行范围缩小到标有@wipd的那些。

关于姓名的说明......

我使用名称@wipd作为装饰器而不是@wip来避免此类问题:

import unittest
class Test(unittest.TestCase):

    from mymodule import wip    
    @wip
    def test_something(self):
        pass

    def test_something_else(self):
        pass

import将使wip装饰器成为类的成员,并且将选择类中的所有测试。 attrib插件检查测试方法的父类,以查看所选属性是否也存在,attrib创建和测试的属性不存在于隔离空间中。因此,如果您使用-a foo进行测试并且您的类包含foo = "platypus",那么插件将选择该类中的所有测试。

答案 3 :(得分:3)

要运行多个特定测试,您只需将它们添加到命令行,以空格分隔。

nosetests test_web.py:TestWeb.test_checkout test_web.py:TestWeb.test_another_checkout

答案 4 :(得分:0)

在我的测试中,使用模块名称指定测试不起作用

您必须指定.py的实际路径:

nosetests /path/to/test/file.py:test_function

这与nose==1.3.7

答案 5 :(得分:0)

我的要求是在另一个 windows 目录中的测试文件中运行单个测试-这是通过 anaconda命令提示符完成的,如下所示:

从以下位置运行 noestests

(base) C:\Users\ABC\Documents\work\

test_MyTestFile.py methodsFile.py 位于:

 (base) C:\Users\ABC\Documents\work\daily\

包含路径 quotes 的方式运行单个测试,如下所示:

(base) C:\Users\ABC\Documents\work>nosetests "daily\\test_MyTestFile.py:MyTestClass.test_add_integers"

test_MyTestFile.py 看起来像这样:

import methodsFile
import unittest

class MyTestClass(unittest.TestCase):

    def test_add_integers(self):
        assert methodsFile.add(5, 3) == 8

    def test_add_integers_zero(self):
        assert methodsFile.add(3, 0) == 3

methodsFile.py 看起来像这样:

def add(num1, num2):
        return num1 + num2