การทดสอบทองคำ

TFF มีไลบรารีขนาดเล็กที่เรียกว่า golden ซึ่งช่วยให้เขียนและบำรุงรักษา Golden Tests ได้ง่าย

การทดสอบทองคำคืออะไร? ฉันควรใช้มันเมื่อใด?

Golden test จะใช้เมื่อคุณต้องการให้นักพัฒนาทราบว่าโค้ดของพวกเขาได้เปลี่ยนแปลงเอาท์พุตของฟังก์ชัน พวกเขาฝ่าฝืนคุณลักษณะหลายประการของการทดสอบหน่วยที่ดี โดยให้คำมั่นสัญญาเกี่ยวกับผลลัพธ์ที่แน่นอนของฟังก์ชัน แทนที่จะทดสอบชุดคุณสมบัติที่ชัดเจนและเป็นเอกสาร บางครั้งก็ไม่ชัดเจนว่าการเปลี่ยนแปลงใน Golden Output "คาดหวัง" หรือไม่ หรือเป็นการละเมิดคุณสมบัติบางอย่างที่ Golden Test กำหนดให้บังคับใช้หรือไม่ ด้วยเหตุนี้ การทดสอบหน่วยที่มีปัจจัยดีจึงมักจะดีกว่าการทดสอบระดับทอง

อย่างไรก็ตาม Golden Tests จะมีประโยชน์อย่างมากในการตรวจสอบความถูกต้องของเนื้อหาข้อความแสดงข้อผิดพลาด การวินิจฉัย หรือโค้ดที่สร้างขึ้น ในกรณีเหล่านี้ การทดสอบทองคำสามารถช่วยตรวจสอบความมั่นใจที่เป็นประโยชน์ว่าการเปลี่ยนแปลงใดๆ ในผลลัพธ์ที่สร้างขึ้นนั้น "ดูถูกต้อง"

ฉันจะเขียนการทดสอบโดยใช้ golden ได้อย่างไร

golden.check_string(filename, value) เป็นจุดเข้าหลักในไลบรารี golden มันจะตรวจสอบสตริง value กับเนื้อหาของไฟล์ที่มีองค์ประกอบเส้นทางสุดท้ายคือ filename ต้องระบุเส้นทางแบบเต็มไปยัง filename ผ่าน commandline --golden <path_to_file> อาร์กิวเมนต์ ในทำนองเดียวกัน ไฟล์เหล่านี้จะต้องพร้อมใช้งานสำหรับการทดสอบโดยใช้อาร์กิวเมนต์ data กับกฎ py_test BUILD ใช้ฟังก์ชัน location เพื่อสร้างเส้นทางสัมพันธ์ที่เหมาะสมที่ถูกต้อง:

py_string_test(
  ...
  args = [
    "--golden",
    "$(location path/to/first_test_output.expected)",
    ...
    "--golden",
    "$(location path/to/last_test_output.expected)",
  ],
  data = [
    "path/to/first_test_output.expected",
    ...
    "path/to/last_test_output.expected",
  ],
  ...
)

ตามธรรมเนียมแล้ว ไฟล์สีทองควรถูกวางไว้ในไดเรกทอรีพี่น้องที่มีชื่อเดียวกันกับเป้าหมายการทดสอบ โดยต่อท้ายด้วย _goldens :

path/
  to/
    some_test.py
    some_test_goldens/
      test_case_one.expected
      ...
      test_case_last.expected

ฉันจะอัปเดตไฟล์ . .expected ได้อย่างไร

ไฟล์ .expected สามารถอัปเดตได้โดยการรันเป้าหมายการทดสอบที่ได้รับผลกระทบด้วยอาร์กิวเมนต์ --test_arg=--update_goldens --test_strategy=local ผลต่างผลลัพธ์ควรได้รับการตรวจสอบการเปลี่ยนแปลงที่ไม่คาดคิด