วิธีรันกรณีทดสอบในไฟล์ที่ระบุ?


205

กรณีทดสอบแพคเกจของฉันกระจัดกระจายในหลายไฟล์ถ้าฉันเรียกใช้go test <package_name>มันรันกรณีทดสอบทั้งหมดในแพ็คเกจ

ไม่จำเป็นต้องเรียกใช้ทั้งหมด มีวิธีระบุไฟล์ที่go testจะใช้เพื่อให้รันเฉพาะกรณีทดสอบที่กำหนดในไฟล์หรือไม่

go 

คำตอบ:


326

มีสองวิธี วิธีที่ง่ายคือใช้-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รูปแบบ หรือเมื่อใดก็ตามที่เป็นไปได้ให้ทำการทดสอบแพ็คเกจทั้งหมดเสมอ


1
คุณจะช่วยอธิบายด้วยวิธีที่ง่าย ๆ ได้-runไหม? ฉันไม่พบคู่มืออ้างอิงใด ๆ

1
คุณยังสามารถหาข้อมูลเกี่ยวกับมันได้ด้วยgo help testflag
เจฟฟรีย์มาร์ติเนซ

เมื่อผมใช้คำสั่งออกเป็นgo test utils.go utils_test.go ok command-line-arguments 0.002sมันไม่ได้ทำการทดสอบ เหตุผลที่ฉันต้องการใช้โหมดการทดสอบนี้เป็นเพราะแพ็คเกจมีไฟล์จำนวนมากและพวกเขายังไม่ได้รวบรวมยกเว้น utils ดังนั้นฉันต้องการที่จะจบ utils ก่อน workinqg ในไฟล์อื่น ๆ ฉันจะทำสิ่งนั้นได้อย่างไร
chmike

หากคุณต้องการที่จะเห็นสิ่งที่เข้าสู่ระบบเมื่อการทดสอบมันคุ้มค่าพูดถึง-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.
robstarbuck

121

@Zzzz คำตอบส่วนใหญ่จะเสร็จสมบูรณ์ แต่เพียงเพื่อช่วยให้ผู้อื่นไม่ต้องเจาะผ่านเอกสารอ้างอิงที่คุณสามารถเรียกใช้การทดสอบเดียวในแพคเกจดังต่อไปนี้:

go test packageName -run TestName

โปรดทราบว่าคุณต้องการส่งต่อในชื่อของการทดสอบไม่ใช่ชื่อไฟล์ที่มีการทดสอบอยู่

การ-runตั้งค่าสถานะยอมรับ regex เพื่อให้คุณสามารถ จำกัด การทดสอบการทดสอบเป็นคลาสการทดสอบ จากเอกสาร:

-run regexp
    Run only those tests and examples matching the regular
    expression.

28
น่าสังเกตว่าชื่อแพ็กเกจนั้นเป็นชื่อแพ็กเกจที่สมบูรณ์เช่น "github.com/you/stuff/a/b/c"
garbagecollector

1.9.3 ยอมรับเส้นทางสัมพัทธ์ของแพ็คเกจด้วย

2
ไม่แน่ใจว่าทำไม แต่ด้วยเหตุผลบางอย่างฉันควรระบุ "./" หน้าชื่อแพคเกจ
Roozbeh Zabihollahi

12

เมื่อทำการทดสอบเดียวฉันมักจะทำ:

go test -run TestSomethingReallyCool ./folder1/folder2/ -v -count 1

-count 1ยังช่วยให้มั่นใจว่าการทดสอบจะทำงานทุกครั้งแทนที่จะเป็นแคช มีประโยชน์เมื่อคุณทำการทดสอบกับสภาพการแข่งขันและมีการทดสอบที่ล้มเหลวในบางครั้งเท่านั้น ในรุ่น Go ที่ไม่ได้ใช้โมดูลสามารถทำได้โดยการตั้งค่าGOCACHE=offแต่สิ่งนี้จะทำงานได้ไม่ดีกับโมดูล Go


6

ในปลั๊กอิน intelliJ IDEA go-lang (และฉันถือว่าเป็น Jetbrains Gogland) คุณสามารถตั้งค่าชนิดการทดสอบเป็นไฟล์ภายใต้การเรียกใช้> แก้ไขการกำหนดค่า

สกรีนช็อตสร้างไฟล์ทดสอบ go go ในขณะเดินทาง


2
ใน Gogland คุณสามารถคลิกขวาที่ไฟล์ทดสอบและเลือก "run foo_test.go" มันจะสร้างแพ็คเกจด้วยการทดสอบแล้วส่ง regex ที่มีชื่อการทดสอบทั้งหมดในไฟล์ทดสอบนั้นไปยังแฟล็ก -run คุณสมบัติที่มีประโยชน์จริงๆ
Eloff


2
go test -v ./<package_name> -run Test

ป้องกันการแคชของผลการทดสอบ

go test -count=1 ./<package_name> -run Test

0
go test -v -timeout 30s <path_to_package> -run ^(TestFuncRegEx)
  • TestFunc ต้องอยู่ในgoไฟล์ทดสอบในแพ็คเกจนั้น
  • เราสามารถให้นิพจน์ทั่วไปเพื่อจับคู่ชุดของกรณีทดสอบหรือเพียงแค่ฟังก์ชั่นกรณีทดสอบที่แน่นอนเพื่อเรียกใช้กรณีทดสอบเดียว ตัวอย่างเช่น-run TestCaseFunc
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.