112

我有一个名为 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

这里有什么问题?

4

6 回答 6

164

您必须像这样指定它:nosetests <file>:<Test_Case>.<test_method>,或

nosetests test_web.py:TestWeb.test_checkout

查看文档

于 2012-07-02T00:58:19.370 回答
20

您还可以指定一个模块:

nosetests tests.test_integration:IntegrationTests.test_user_search_returns_users
于 2013-08-20T10:19:17.993 回答
11

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

我这样定义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",则该类中的所有测试都将由插件选择。

于 2016-07-08T15:09:09.333 回答
5

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

nosetests test_web.py:TestWeb.test_checkout test_web.py:TestWeb.test_another_checkout
于 2017-05-22T09:21:55.503 回答
0

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

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

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

这与nose==1.3.7

于 2018-06-14T14:06:23.163 回答
0

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

从以下位置进行鼻子测试

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

test_MyTestFile.pymethodsFile.py在:

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

通过包含带引号的路径来运行单个测试,如下所示:

(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
于 2019-09-23T14:29:51.260 回答