python - 我怎样才能找到在基础测试类上定义的类属性?

标签 python integration-testing multiple-inheritance nose mixins

我正在对数据库运行一些集成测试,我想要一个看起来像这样的结构:

class OracleMixin(object):
    oracle = True
    # ... set up the oracle connection

class SqlServerMixin(object):
    sql_server = True
    # ... set up the sql server connection

class SomeTests(object):
    integration = True
    # ... define test methods here

class test_OracleSomeTests(SomeTests, OracleMixin):
    pass

class test_SqlServerSomeTests(SomeTests, SqlServerMixin):
    pass

这样,我可以像这样分别运行 SQL Server 测试和 Oracle 测试:

nosetests -a oracle
nosetests -a sql_server

或者像这样的所有集成测试:

nosetests -a integration

但是,nose 似乎只会在子类上查找属性,而不会在基类上查找。因此我必须像这样定义测试类,否则测试将不会运行:

class test_OracleSomeTests(SomeTests, OracleMixin):
    oracle = True
    integration = True

class test_SqlServerSomeTests(SomeTests, SqlServerMixin):
    sql_server = True
    integration = True

维护起来有点乏味。任何想法如何解决这个问题?如果我只处理一个基类,我将只使用一个元类并在每个类上定义属性。但是我对测试类有一个元类、Oracle 有一个元类和 SQL Server 有一个元类感到不安。

最佳答案

我不认为你可以不制作自己的插件。 attrib 插件中的代码只查看类 __dict__。这是 code

def wantClass(self, cls):
    """Accept the class if the class or any method is wanted.
    """
    cls_attr = cls.__dict__
    if self.validateAttrib(cls_attr) is not False:
        return None
    ...

你可以破解插件来做类似的事情(未测试)。

def wantClass(self, cls):
    """Accept the class if the class or any method is wanted.
    """
    for class_ in cls.__mro__: 
        cls_attr = class_.__dict__
        if self.validateAttrib(cls_attr) is not False:
            return None
    cls_attr = cls.__dict__
    ...

但是,我不确定这比元类选项好还是坏。

关于python - 我怎样才能找到在基础测试类上定义的类属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1188922/

相关文章:

python - 如何使用 SQLAlchemy 设置 Flask 应用程序进行测试?

python - Pandas:对于 2 个或多个特定列值完全相同的行组,如何将唯一整数分配为新列

javascript - 如何在 Jest 中使用全局变量

haskell - Haskell 中的编译器集成测试

c++ - 指针值不同,但它们比较相等。为什么?

c++ - 在 QueryInterface 实现中是否应该使用 dynamic_cast?

python - 是否有 django 习惯用法在数据库中存储与应用程序相关的变量?

grails - 测试 Controller 响应时出错。回复未更新

python - 如何正确使用多重(重新)继承

Python:将 JSON 字符串写入文件。