5

buildbot を使用してテストを開始したい Python プロジェクトがあります。その単体テストには、一部のプラットフォームでのみ機能するはずのテストが含まれています。したがって、すべてのプラットフォームで合格する必要があるテスト、特定の 1 つのプラットフォームでのみ実行する必要があるテスト、プラットフォーム A、B、C で合格する必要があるテスト、および B と D で合格する必要があるテストがあります。

これを行う最善の方法は何ですか?前述のように、テストごとにターゲット プラットフォームのリストが異なる可能性があるため、単純なスイートは面倒です。プラットフォームに一致する "@run_on" および "@ignore_on" デコレータをテスト メソッドに追加することを考えました。もっと良いものはありますか?

4

3 に答える 3

2

何度か、テスト モジュールでこの非常に単純なアプローチを使用しました。

import sys
import unittest

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

if 'linux' in sys.platform:
    class TestIt(unittest.TestCase):
        ...
于 2009-07-29T12:01:48.627 に答える
0

テストローダーの便利な場所のように思えます。

http://docs.python.org/library/unittest.html#unittest.TestLoader.loadTestsFromNameをチェックしてください

適切な命名規則をいくつか提供すれば、おそらくテストの命名規則に基づいてスイートを作成できます。

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

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 をリストするだけです。リストはかなり短く、ゆっくりと成長します。

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

次のようなものを試すことができます

class TextC_XHPUX( unittest.TestCase ):

通常、テキスト マッチング ルールは"_someOSName"; "_X"あなたの例外は、名前をいじる奇妙なテキストフィルターになります。

「OS の肯定的なリストを作成することはできません。新しい OS を追加するとどうなるでしょうか?すべてのテストの名前を変更して、それを明示的に含める必要がありますか?」はい。新しいオペレーティング システム市場の発展は遅く、管理はそれほど難しくありません。

別の方法として、各クラス (つまり、クラス レベルの関数) またはデコレータ内に情報を含め、クラス レベルの関数を評価するカスタマイズされたクラス ローダーを使用することもできます。

于 2009-07-29T11:44:31.803 に答える
0

プラットフォーム モジュールなどを使用して、テストを実行する必要があるかどうかを確認し、そうでない場合は単純に通過させるデコレータを使用することにしました (ただし、python2.7 のトランクには、SkipTest 例外が既に含まれていることがわかりました。そのような場合、テストを無視するために発生します)。

于 2009-09-03T06:50:32.233 に答える