Kerangka UnitTest - Lewati Tes

Dukungan untuk melewatkan tes telah ditambahkan sejak Python 2.7. Dimungkinkan untuk melewati metode pengujian individu atau kelas TestCase, baik bersyarat maupun tanpa syarat. Kerangka kerja ini memungkinkan pengujian tertentu untuk ditandai sebagai 'kegagalan yang diharapkan'. Tes ini akan 'gagal' tetapi tidak akan dihitung sebagai gagal di TestResult.

Untuk melewati metode tanpa syarat, metode kelas unittest.skip () berikut dapat digunakan -

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()

Karena skip () adalah metode kelas, ini diawali dengan @ token. Metode ini mengambil satu argumen: pesan log yang menjelaskan alasan lewati.

Ketika skrip di atas dijalankan, hasil berikut ditampilkan di konsol -

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

OK (skipped = 1)

Karakter 's' menunjukkan bahwa tes telah dilewati.

Sintaks alternatif untuk melewatkan pengujian menggunakan metode instance skipTest () di dalam fungsi pengujian.

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

Dekorator berikut menerapkan pengabaian pengujian dan kemungkinan kegagalan -

S.No. Metode & Deskripsi
1

unittest.skip(reason)

Lewati tes yang didekorasi tanpa syarat. alasan harus menjelaskan mengapa tes dilewati.

2

unittest.skipIf(condition, reason)

Lewati tes yang didekorasi jika kondisinya benar.

3

unittest.skipUnless(condition, reason)

Lewati tes yang didekorasi kecuali kondisinya benar.

4

unittest.expectedFailure()

Tandai tes sebagai kegagalan yang diharapkan. Jika pengujian gagal saat dijalankan, pengujian tersebut tidak dihitung sebagai kegagalan.

Contoh berikut menunjukkan penggunaan lompatan bersyarat dan kegagalan yang diharapkan.

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()

Dalam contoh di atas, testub () dan testdiv () akan dilewati. Dalam kasus pertama a> b benar, sedangkan pada kasus kedua b == 0 tidak benar. Di sisi lain, testmul () telah ditandai sebagai kegagalan yang diharapkan.

Ketika skrip di atas dijalankan, dua tes yang dilewati menunjukkan 's' dan kegagalan yang diharapkan ditampilkan sebagai '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)