我越來越對數據庫運行的一些集成測試,我想有一個看起來像這樣的結構:我怎樣才能找到鼻子來找到在基礎測試類上定義的類屬性?
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 utes在子類上,而不在基類上。因此,我必須定義的測試類這樣或測試將不會運行:
class test_OracleSomeTests(SomeTests, OracleMixin):
oracle = True
integration = True
class test_SqlServerSomeTests(SomeTests, SqlServerMixin):
sql_server = True
integration = True
這是一個有點乏味維護。任何想法如何解決這個問題?如果我只是在處理一個基類,那麼我只需使用一個元類並在每個類上定義屬性。但是我對測試類的元類,Oracle的元類和SQL Server的元類感到不安。
如果您的父類是不是「新風格」類(即它們不擴展「對象」),我不認爲會有`__mro__`屬性。 只是一個小小的調整,但改變了行 'class_ ...' 到 `在class getattr(cls,'__mro__',[]):``` – 2009-11-12 16:50:33