Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python nose`ValueError:在<;类别';我的测试。检查错误测试'>;:运行测试`_Python_Nose_Nosetests_Python Unittest - Fatal编程技术网

python nose`ValueError:在<;类别';我的测试。检查错误测试'>;:运行测试`

python nose`ValueError:在<;类别';我的测试。检查错误测试'>;:运行测试`,python,nose,nosetests,python-unittest,Python,Nose,Nosetests,Python Unittest,我有一个用鼻子运行的工作测试套件 我最近意识到我需要在我的整体设置()中添加一些东西,这是由每个单独测试中发现的变量触发的(该变量由我们的版本控制系统更新) 我已经在我的BaseTest.py和我的个人测试中添加了一个\uuuu init\uuu()。但是,我得到ValueError:runTest中没有这样的测试方法 从谷歌上看,这似乎与unittest加载程序有关。但是Nose以前总是照顾所有的装载机 我猜这与我在Nose设置后触摸methodName属性有关,但我不知道应该将其设置为什么,

我有一个用鼻子运行的工作测试套件

我最近意识到我需要在我的整体
设置()中添加一些东西,这是由每个单独测试中发现的变量触发的(该变量由我们的版本控制系统更新)

我已经在我的BaseTest.py和我的个人测试中添加了一个
\uuuu init\uuu()
。但是,我得到
ValueError:runTest中没有这样的测试方法

从谷歌上看,这似乎与unittest加载程序有关。但是Nose以前总是照顾所有的装载机

我猜这与我在Nose设置后触摸
methodName
属性有关,但我不知道应该将其设置为什么,特别是因为我使用了各种Nose插件。或许有更好的办法。我需要做什么不同的事情

BaseTest.py

import unittest

class BaseTest(unittest.TestCase):
    def __init__(self, methodName='runTest', p4rev=None):
        super(BaseTest, self).__init__(methodName)
        self.p4rev = p4rev

    def setUp(self):
        triggerSomething(p4rev)
My_test.py

from BaseTest import BaseTest

rev = '12345'

class CheckError_Test(BaseTest):
    def __init__(self, rev):
        super(CheckError_Test, self).__init__(p4rev=rev)

    dosomething()
注意:如果我没有使用
super(BaseTest,self)。\uuu init\uuuu(methodName)
我会得到一个错误:
属性错误:“check\u error\u test”对象没有属性“\u testMethodName”
。因此将其包括在内


澄清:一条评论建议重复帖子,但链接帖子一般是关于如何运行测试的,这篇文章询问如何在运行时访问给定测试中的特定变量。

您可以将
BaseTest
设置为一个抽象类,它要求派生类的实例设置
self.p4rev

class BaseTest(unittest.TestCase):

    # Note: subclasses must provide the p4rev attribute
    def setUp(self):
        triggerSomething(self.p4rev)
然后在测试脚本中

from BaseTest import BaseTest

rev = '12345'

class CheckError_Test(BaseTest):
    def setUp(self):
        self.p4rev = rev
        BaseTest.setUp(self)  # Or use super() if you like
您可以选择使用
ABCMeta
类更清楚地将
BaseTest
标记为抽象类,并将
p4rev
定义为抽象属性

我很确定有一些方法可以让
nose
使用客户
TestLoader
来实例化您的测试,但在我看来,这似乎是一个更简单的替代方法。

我只会使用内置来传递信息:

在my_test.py中:

from base_test import BaseTest
from nose.plugins.attrib import attr

rev = '12345'

@attr(rev=rev)
class CheckError_Test(BaseTest):
    def test_me(self):
        assert self.rev == rev
在base_test.py中:

import unittest

def triggerSomething(text):
    print "revision was set to",  text

class BaseTest(unittest.TestCase):
    def setUp(self):
        p4rev = getattr(self, 'rev')
        triggerSomething(p4rev)
外壳输出:

$nosets my_test.py--pdb-s


如果
My_test.py
中存在
rev
,为什么不能将其作为全局变量访问,而不是尝试将其嵌入到测试类中?这似乎会导致循环依赖
Bast\u Test
类需要
my\u Test.rev
进行
setUp()
。但是
my_test
需要
Bast_test.setUp()
才能运行…可能重复的
revision was set to 12345
.
----------------------------------------------------------------------
Ran 1 test in 0.002s

OK