我正在对数据库运行一些集成测试,我希望有一个看起来像这样的结构:
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 的元类,我感到不安。