Fixtures Teardowns

Python เบื้องต้นสำหรับการทดสอบโค้ด

Alexander Levin

Data Scientist

Fixture Teardown คืออะไร

  • Fixture Teardown - กระบวนการล้างข้อมูล ("tearing down") ทรัพยากรที่จัดสรรหรือสร้างขึ้นในช่วงตั้งค่าสภาพแวดล้อมการทดสอบ

นึกถึงอุปมาเรื่อง "ปิกนิก":

  1. ชวนเพื่อนและเตรียมอาหาร
  2. สนุกกันได้เลย!
  3. เก็บกวาด - นั่นคือ teardown
Python เบื้องต้นสำหรับการทดสอบโค้ด

ทำไมต้องใช้ Teardown

การ ล้างสภาพแวดล้อม เมื่อสิ้นสุดการทดสอบเป็นสิ่งสำคัญ หากไม่ใช้ teardown อาจเกิดปัญหาร้ายแรงได้:

  • Memory leak
  • ความเร็วและประสิทธิภาพการทำงานลดลง
  • ผลการทดสอบไม่ถูกต้อง
  • Pipeline ล้มเหลวและเกิดข้อผิดพลาด
Python เบื้องต้นสำหรับการทดสอบโค้ด

ควรใช้เมื่อใด

ควรใช้เมื่อ:

  • ออบเจกต์ขนาดใหญ่
  • มีการทดสอบมากกว่าหนึ่งครั้ง
  • ใช้ autouse

ไม่จำเป็นต้องใช้เมื่อ:

  • สคริปต์ง่าย ๆ ที่มีการทดสอบเพียงครั้งเดียว
Python เบื้องต้นสำหรับการทดสอบโค้ด

Lazy Evaluation ใน Python

  • yield - คีย์เวิร์ดของ Python ที่ใช้สร้าง generator
# Example of generator function
def lazy_increment(n):
    for i in range(n):
        yield i
f = lazy_increment(5)
next(f) # 0
next(f) # 1
next(f) # 2
Python เบื้องต้นสำหรับการทดสอบโค้ด

วิธีใช้

วิธีใช้:

  • แทน return ด้วย yield
  • วางโค้ด teardown ไว้หลัง yield
  • ตรวจสอบว่าโค้ด setup อยู่ก่อน yield เท่านั้น
Python เบื้องต้นสำหรับการทดสอบโค้ด

ตัวอย่าง Teardown

@pytest.fixture
def init_list():
    return []

@pytest.fixture(autouse=True)
def add_numbers_to_list(init_list):
    # Fixture Setup
    init_list.extend([i for i in range(10)])
    # Fixture output
    yield init_list
    # Teardown statement
    init_list.clear()

def test_9(init_list):
    assert 9 in init_list
Python เบื้องต้นสำหรับการทดสอบโค้ด

สรุป

  • นิยาม: Fixture Teardown - กระบวนการล้างทรัพยากรที่จัดสรรไว้ในช่วงตั้งค่า
  • การใช้งาน:
    • ใช้คีย์เวิร์ด yield แทน return
    • วางโค้ด teardown ไว้หลัง yield
  • ข้อดี:
    • ป้องกันความล้มเหลวของซอฟต์แวร์
    • ป้องกันประสิทธิภาพการทำงานลดลง
  • ควรใช้เมื่อ: ทุกครั้งที่มีการทดสอบมากกว่าหนึ่งครั้ง!
Python เบื้องต้นสำหรับการทดสอบโค้ด

มาฝึกกันเถอะ!

Python เบื้องต้นสำหรับการทดสอบโค้ด

Preparing Video For Download...