gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 03:08:06 25 4
gpt4 key购买 nike

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

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com