私はデータベースに対して実行されているいくつかの統合テストを取得しています、と私はこのような何かに見える構造したいのです:ベーステストクラスで定義されたクラス属性を見つける方法を教えてください。
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
しかし、鼻だけATTRIBを探しますことが表示されますベースクラスではなく、サブクラス上にあります。したがって、このようなテストクラスを定義するか、テストが実行されません。
class test_OracleSomeTests(SomeTests, OracleMixin):
oracle = True
integration = True
class test_SqlServerSomeTests(SomeTests, SqlServerMixin):
sql_server = True
integration = True
これは少し面倒です。これを回避する方法は? 1つの基本クラスを扱っていただけの場合は、メタクラスを使用して各クラスの属性を定義します。しかし、テストクラスのメタクラス、Oracleのメタクラス、SQL Serverのメタクラスについて不安を感じます。
(テストクラスをサブクラスについて何を知っている必要はないように、本当に彼らが同じ変数を定義する必要がありますが)新しいスタイルのクラスではない(つまり、それらは "オブジェクト"を拡張しない)、私は '__mro__'属性があるとは思わない。 getattr(cls、 '__mro__'、[])のclass_のために 'for class_ ...' 〜' –