การทดสอบแต่ละหน่วยจะปิดใช้งานชั่วคราวเมื่อใช้unittest
โมดูลใน Python ได้อย่างไร
การทดสอบแต่ละหน่วยจะปิดใช้งานชั่วคราวเมื่อใช้unittest
โมดูลใน Python ได้อย่างไร
คำตอบ:
วิธีการทดสอบส่วนบุคคลหรือชั้นเรียนสามารถปิดใช้งานได้โดยใช้unittest.skip
มัณฑนากร
@unittest.skip("reason for skipping")
def test_foo():
print('This is foo test case.')
@unittest.skip # no reason needed
def test_bar():
print('This is bar test case.')
สำหรับตัวเลือกอื่น ๆ โปรดดูเอกสารสำหรับการข้ามการทดสอบและความล้มเหลวที่คาดไว้
@unittest.skip
งานได้ดี
@unittest.skip
ไม่ทำงาน
คุณสามารถใช้มัณฑนากรเพื่อปิดใช้งานการทดสอบที่สามารถรวมฟังก์ชันและป้องกันไม่ให้การทดสอบหน่วย googletest หรือ python เรียกใช้ testcase
def disabled(f):
def _decorator():
print f.__name__ + ' has been disabled'
return _decorator
@disabled
def testFoo():
'''Foo test case'''
print 'this is foo test case'
testFoo()
เอาท์พุท:
testFoo has been disabled
เวอร์ชันล่าสุด (2.7 - ยังไม่เผยแพร่) รองรับการทดสอบข้าม / ปิดใช้งานเช่นนี้ คุณสามารถรับโมดูลนี้และใช้กับการติดตั้ง Python ที่มีอยู่ได้ มันอาจจะใช้ได้
ก่อนหน้านี้ผมใช้ในการเปลี่ยนชื่อการทดสอบที่ผมอยากข้ามไปจากxtest_testname
test_testname
นี่คือสคริปต์ elisp ด่วนสำหรับทำสิ่งนี้ Elisp ของฉันเป็นสนิมเล็กน้อยดังนั้นฉันจึงขออภัยล่วงหน้าสำหรับปัญหาที่เกิดขึ้น ยังไม่ทดลอง
(defun disable_enable_test ()
(interactive "")
(save-excursion
(beginning-of-line)
(search-forward "def")
(forward-char)
(if (looking-at "disable_")
(zap-to-char 1 ?_)
(insert "disable_"))))
เพียงแค่วาง@unittest.SkipTest
มัณฑนากรไว้เหนือการทดสอบก็เพียงพอแล้ว
unittest.skip
(โดยไม่มีเหตุผล) ทำให้ฉันมีข้อผิดพลาดใน Python 2 แต่ไม่ใช่ใน Python 3
ฉันเพิ่งเปลี่ยนชื่อวิธีกรณีทดสอบด้วยขีดล่าง: test_myfunc กลายเป็น _test_myfunc
เอกสาร 2.1 ไม่ระบุละเลยหรือข้ามวิธี
โดยปกติแล้วฉันจะบล็อกความคิดเห็นเมื่อจำเป็น
มุ่งเน้นไปที่ส่วน "ปิดใช้งานชั่วคราว" ของคำถามคำตอบที่ดีที่สุดนั้นขึ้นอยู่กับกรณีการใช้งาน กรณีการใช้งานที่ทำให้ฉันมาที่นี่คือฉันกำลังทำการทดสอบการพัฒนาฟังก์ชัน ในกระบวนการนี้ฉันเขียนการทดสอบอย่างต่อเนื่องและมักใช้จุดพักในฟังก์ชันสำหรับการดีบัก ถ้าฉันเรียกใช้การทดสอบทั้งหมดทุกครั้งที่เรียกใช้นักวิ่งทดสอบฉันจะหยุดที่จุดพักสำหรับการทดสอบที่ได้ผลแล้ว การเพิ่มคำว่า "skip" หรือ munging ชื่อการทดสอบหรืออะไรทำนองนั้นไม่ใช่สิ่งที่ฉันต้องการเพราะเมื่อฉันเขียนฟังก์ชันเสร็จแล้วฉันต้องการให้การทดสอบทั้งหมดทำงาน ถ้าฉันใช้ "ข้าม" ฉันจะต้องย้อนกลับและ "ยกเลิกการข้าม"
สำหรับกรณีการใช้งานของฉันวิธีแก้ปัญหาอยู่ในตัวทดสอบไม่ใช่ในรหัสทดสอบ ฉันใช้pytest ด้วย pytest ทำให้ง่ายต่อการระบุการทดสอบเดียวจากบรรทัดคำสั่ง:
pytest PYTHON_FILENAME.TEST_CLASS.TEST_NAME
(แทนที่ตัวพิมพ์ใหญ่ด้วยค่าของคุณ)
ฉันเข้าใจว่าคำถามนั้นมีไว้สำหรับ python-unitest ฉันไม่ได้ใช้มันมานานแล้ว ฉันจะไม่แปลกใจเลยถ้ามันมีอะไรที่คล้ายกับ pytest หากไม่เป็นเช่นนั้นคุณสามารถเปลี่ยนไปใช้ pytest ได้อย่างง่ายดาย คุณไม่จำเป็นต้องแก้ไขรหัสของคุณ เพียงแค่ติดตั้งและเปลี่ยนคำสั่งนักวิ่งทดสอบของคุณ
นอกจากนี้ฉันใช้ PyCharm Pro ในหน้าที่แสดงรหัสการทดสอบของฉันมีไอคอนเล็ก ๆ ถัดจาก def สำหรับการทดสอบแต่ละครั้ง ฉันสามารถคลิกไอคอนนั้นและเรียกใช้การทดสอบนั้นทีละรายการ
@unittest.SkipTest
ใช้ได้ผลไม่ใช่@unittest.skip