Unittest-framework-skip-test

提供:Dev Guides
移動先:案内検索

UnitTest Framework-テストをスキップ

Python 2.7以降、テストのスキップのサポートが追加されました。 個々のテストメソッドまたはTestCaseクラスを、条件付きでも無条件でもスキップできます。 このフレームワークにより、特定のテストを「予想される失敗」としてマークできます。 このテストは「失敗」しますが、TestResultでは失敗としてカウントされません。

メソッドを無条件にスキップするには、次のunittest.skip()クラスメソッドを使用できます-

import unittest

   def add(x,y):
      return x+y

class SimpleTest(unittest.TestCase):
   @unittest.skip("demonstrating skipping")
   def testadd1(self):
      self.assertEquals(add(4,5),9)

if __name__ == '__main__':
   unittest.main()

skip()はクラスメソッドであるため、@トークンがプレフィックスとして付けられます。 このメソッドは、引数を1つ取ります。スキップの理由を説明するログメッセージです。

上記のスクリプトが実行されると、次の結果がコンソールに表示されます-

C:\Python27>python skiptest.py
s
----------------------------------------------------------------------
Ran 1 test in 0.000s

OK (skipped = 1)

文字「s」は、テストがスキップされたことを示します。

テストをスキップするための代替構文は、テスト関数内でインスタンスメソッドskipTest()を使用することです。

def testadd2(self):
   self.skipTest("another method for skipping")
   self.assertTrue(add(4 + 5) == 10)

次のデコレータは、テストのスキップと予期される失敗を実装します-

S.No. Method & Description
1

unittest.skip(reason)

装飾されたテストを無条件にスキップします。 _reason_は、テストがスキップされる理由を説明する必要があります。

2

unittest.skipIf(condition, reason)

条件が真の場合、装飾されたテストをスキップします。

3

unittest.skipUnless(condition, reason)

条件が真でない限り、装飾されたテストをスキップします。

4

unittest.expectedFailure()

テストを予想される失敗としてマークします。 実行時にテストが失敗した場合、テストは失敗としてカウントされません。

次の例は、条件付きスキップと予期される失敗の使用を示しています。

import unittest

class suiteTest(unittest.TestCase):
   a = 50
   b = 40

   def testadd(self):
      """Add"""
      result = self.a+self.b
      self.assertEqual(result,100)

   @unittest.skipIf(a>b, "Skip over this routine")
   def testsub(self):
      """sub"""
      result = self.a-self.b
      self.assertTrue(result == -10)

   @unittest.skipUnless(b == 0, "Skip over this routine")
   def testdiv(self):
      """div"""
      result = self.a/self.b
      self.assertTrue(result == 1)

   @unittest.expectedFailure
   def testmul(self):
      """mul"""
      result = self.a*self.b
      self.assertEqual(result == 0)

if __name__ == '__main__':
   unittest.main()

上記の例では、testsub()とtestdiv()はスキップされます。 最初のケースではa> bが真ですが、2番目のケースではb == 0は真ではありません。 一方、testmul()は予想される失敗としてマークされています。

上記のスクリプトを実行すると、2つのスキップされたテストは「s」を示し、予想される失敗は「x」として表示されます。

C:\Python27>python skiptest.py
Fsxs
================================================================
FAIL: testadd (__main__.suiteTest)
Add
----------------------------------------------------------------------
Traceback (most recent call last):
   File "skiptest.py", line 9, in testadd
      self.assertEqual(result,100)
AssertionError: 90 != 100

----------------------------------------------------------------------
Ran 4 tests in 0.000s

FAILED (failures = 1, skipped = 2, expected failures = 1)