กรณีทดสอบแพคเกจของฉันกระจัดกระจายในหลายไฟล์ถ้าฉันเรียกใช้go test <package_name>มันรันกรณีทดสอบทั้งหมดในแพ็คเกจ
ไม่จำเป็นต้องเรียกใช้ทั้งหมด มีวิธีระบุไฟล์ที่go testจะใช้เพื่อให้รันเฉพาะกรณีทดสอบที่กำหนดในไฟล์หรือไม่
กรณีทดสอบแพคเกจของฉันกระจัดกระจายในหลายไฟล์ถ้าฉันเรียกใช้go test <package_name>มันรันกรณีทดสอบทั้งหมดในแพ็คเกจ
ไม่จำเป็นต้องเรียกใช้ทั้งหมด มีวิธีระบุไฟล์ที่go testจะใช้เพื่อให้รันเฉพาะกรณีทดสอบที่กำหนดในไฟล์หรือไม่
คำตอบ:
มีสองวิธี วิธีที่ง่ายคือใช้-runแฟล็กและระบุชื่อการจับคู่รูปแบบของการทดสอบที่คุณต้องการรัน
ตัวอย่าง:
$ go test -run NameOfTest
ดูเอกสารสำหรับข้อมูลเพิ่มเติม
อีกวิธีคือตั้งชื่อไฟล์เฉพาะที่มีการทดสอบที่คุณต้องการรัน:
$ go test foo_test.go
แต่มีการจับ วิธีนี้ใช้ได้ดีถ้า:
foo.gopackage fooอยู่ในfoo_test.goอยู่ในpackage foo_testและนำเข้า 'foo'ถ้าfoo_test.goและfoo.goเป็นแพคเกจเดียวกัน (กรณีร่วมกัน) แล้วคุณจะต้องตั้งชื่อไฟล์อื่น ๆ foo_testทั้งหมดที่จำเป็นในการสร้าง ในตัวอย่างนี้มันจะเป็น:
$ go test foo_test.go foo.go
ฉันอยากจะแนะนำให้ใช้-runรูปแบบ หรือเมื่อใดก็ตามที่เป็นไปได้ให้ทำการทดสอบแพ็คเกจทั้งหมดเสมอ
go help testflag
go test utils.go utils_test.go ok command-line-arguments 0.002sมันไม่ได้ทำการทดสอบ เหตุผลที่ฉันต้องการใช้โหมดการทดสอบนี้เป็นเพราะแพ็คเกจมีไฟล์จำนวนมากและพวกเขายังไม่ได้รวบรวมยกเว้น utils ดังนั้นฉันต้องการที่จะจบ utils ก่อน workinqg ในไฟล์อื่น ๆ ฉันจะทำสิ่งนั้นได้อย่างไร
-vธง (verbose) จากเอกสาร-v Verbose output: log all tests as they are run. Also print all text from Log and Logf calls even if the test succeeds.
@Zzzz คำตอบส่วนใหญ่จะเสร็จสมบูรณ์ แต่เพียงเพื่อช่วยให้ผู้อื่นไม่ต้องเจาะผ่านเอกสารอ้างอิงที่คุณสามารถเรียกใช้การทดสอบเดียวในแพคเกจดังต่อไปนี้:
go test packageName -run TestName
โปรดทราบว่าคุณต้องการส่งต่อในชื่อของการทดสอบไม่ใช่ชื่อไฟล์ที่มีการทดสอบอยู่
การ-runตั้งค่าสถานะยอมรับ regex เพื่อให้คุณสามารถ จำกัด การทดสอบการทดสอบเป็นคลาสการทดสอบ จากเอกสาร:
-run regexp
Run only those tests and examples matching the regular
expression.
เมื่อทำการทดสอบเดียวฉันมักจะทำ:
go test -run TestSomethingReallyCool ./folder1/folder2/ -v -count 1
-count 1ยังช่วยให้มั่นใจว่าการทดสอบจะทำงานทุกครั้งแทนที่จะเป็นแคช มีประโยชน์เมื่อคุณทำการทดสอบกับสภาพการแข่งขันและมีการทดสอบที่ล้มเหลวในบางครั้งเท่านั้น ในรุ่น Go ที่ไม่ได้ใช้โมดูลสามารถทำได้โดยการตั้งค่าGOCACHE=offแต่สิ่งนี้จะทำงานได้ไม่ดีกับโมดูล Go
ในปลั๊กอิน intelliJ IDEA go-lang (และฉันถือว่าเป็น Jetbrains Gogland) คุณสามารถตั้งค่าชนิดการทดสอบเป็นไฟล์ภายใต้การเรียกใช้> แก้ไขการกำหนดค่า
alias testcases="sed -n 's/func.*\(Test.*\)(.*/\1/p' | xargs | sed 's/ /|/g'"
go test -v -run $(cat coordinator_test.go | testcases)
go test -v ./<package_name> -run Test
ป้องกันการแคชของผลการทดสอบ
go test -count=1 ./<package_name> -run Test
go test -v -timeout 30s <path_to_package> -run ^(TestFuncRegEx)
goไฟล์ทดสอบในแพ็คเกจนั้น-run TestCaseFunc
-runไหม? ฉันไม่พบคู่มืออ้างอิงใด ๆ