2009-07-29 7 views
5

私たちはbuildbotを使ってテストを開始したいpythonプロジェクトを持っています。そのユニットテストには、一部のプラットフォームでしか動作しないテストが含まれます。したがって、すべてのプラットフォームでテストを行い、1つの特定のプラットフォームでのみ実行するテスト、プラットフォームA、B、Cで実行するテストとBとDを渡すテストがあります。プラットフォーム固有の単体テストの配布および実行方法は?

これを行う最善の方法は?記述されているように、各テストはターゲットプラットフォームの異なるリストを持つことができるので、シンプルなスイートは面倒です。私はプラットフォームをテストメソッドにマッチさせる "@run_on"と "@ignore_on"デコレータを追加することを考えました。もっと良いものはありますか?

答えて

0

、テストを実行すべきかどうかを確認します。私はテストモジュールでは、この非常に単純なアプローチを使用している機会のカップルに

+1

SkipTestも非常に便利です - スキップしないオプションが付いています。 – Almad

0

テストローダーにとって便利な音です。

あなたはおそらく、あなたのテストの命名規則に基づいてスイートを作成することができ、いくつかの適切な命名規則を提供する場合http://docs.python.org/library/unittest.html#unittest.TestLoader.loadTestsFromName

をチェックしてください。

AIX、Linux(すべて)および32ビットWindowsで実行されるテストA、Windows 64、Linux 64およびSolarisで実行されるテストB、HPUXおよびテストD以外のすべてで実行されるテストCがある場合それはすべての上で実行されます...可能な命名規則はこれには何がありますか?

class TestA_AIX_Linux2_Win32(unittest.TestCase): 

class TestB_Win64_Linux64_Solaris(unittest.TestCase): 

class TestC_AIX_Linux2_Win32_Win64_Linux64_Solaris(unittest.TestCase): 

class TestD_All(unittest.TestCase): 

ハード部分は「HP/UXではない」です。負の論理を避ければ、あなたの人生はよりシンプルになります。この場合、HP/UX以外のすべてのOSを一覧表示するだけです。リストはかなり短く、ゆっくりと成長します。

「すべて」テストは、現在のプラットフォームのテストリストに統合された完全なスイートを作成する単なるテキスト検索です。

あなたはあなたのテキストマッチングルールは通常"_someOSName"ある

class TextC_XHPUX(unittest.TestCase): 

ような何かを試みることができます。あなたの例外は、"_X"という名前で混乱する奇妙なテキストフィルタになります。

"新しいOSを追加するとどうなるでしょうか?すべてのテストの名前を明示的に含める必要がありますか?"はい。新しいオペレーティングシステム市場は進化が遅いですが、管理するのはそれほど苦労しません。

代わりに、各クラス(すなわち、クラスレベルの関数)またはデコレータ内に情報を含め、クラスレベルの関数を評価するカスタマイズされたクラスローダーを使用することができます。私たちは、プラットフォームモジュールなどを使用して、デコレータで行くことに決めました

import sys 
import unittest 

if 'win' in sys.platform: 
    class TestIt(unittest.TestCase): 
     ... 

if 'linux' in sys.platform: 
    class TestIt(unittest.TestCase): 
     ... 
+0

私はそれがどのように正確に役立つかは分かりません。私がAIX、Linux(全部)と32ビットWindowsで実行するテストA、Windows 64、Linux 64、Solarisで動作するテストB、HPUX以外のすべてで動作するテストC、そしてすべてで動作するテストD ...これにはどのような命名規則がありますか? – abyx

2

単純に通過させていなければ、python2.7はすでにそのトランクにSkipTestの例外があり、そのような場合にはテストを無視することができます。