บังคับให้ทดสอบซ้ำหรือปิดใช้งานการทดสอบแคช


116

ปัญหา:

เมื่อฉันทำการทดสอบ go เดียวกันสองครั้งการรันครั้งที่สองจะไม่เสร็จสิ้นเลย ผลลัพธ์คือผลลัพธ์ที่แคชไว้จากการรันครั้งแรก

PASS    
ok      tester/apitests    (cached)

ลิงค์

ฉันตรวจสอบhttps://golang.org/cmd/go/#hdr-Testing_flagsแล้วแต่ไม่มีค่าสถานะ cli สำหรับจุดประสงค์นั้น

คำถาม:

มีความเป็นไปได้หรือไม่ที่จะบังคับให้ go test รันการทดสอบเสมอและไม่ให้แคชผลการทดสอบ

คำตอบ:


174

มีตัวเลือกบางอย่างตามที่อธิบายไว้ในเอกสารแฟล็กการทดสอบ :

  • go clean -testcache: หมดอายุผลการทดสอบทั้งหมด
  • ใช้แฟล็กที่ไม่สามารถแคชได้ในการทดสอบของคุณ วิธีการใช้สำนวนคือการใช้-count=1

ที่กล่าวว่าการเปลี่ยนแปลงรหัสหรือรหัสทดสอบของคุณจะทำให้ผลการทดสอบแคชเป็นโมฆะ (มีตรรกะเพิ่มเติมเมื่อใช้ไฟล์ในเครื่องหรือตัวแปรสภาพแวดล้อมด้วย) ดังนั้นคุณไม่จำเป็นต้องยกเลิกแคชทดสอบด้วยตนเอง


4
ยังคงมีประโยชน์ในกรณีที่คุณกำลังทดสอบกับการพึ่งพาแบบเคลื่อนที่เช่นฐานข้อมูลที่คุณตั้งค่า / ลบการอ้างอิง แต่ไม่ใช่รหัสของคุณ ดูเหมือนว่า OP กำลังทดสอบกับ API ที่ไม่ถูกตรึงซึ่งเป็นสิ่งที่ทำให้เกิดคำถามของพวกเขา
joakim

เป็นไปได้ไหมที่จะล้างแคชสำหรับการทดสอบเฉพาะเท่านั้น
nickcamillo

4
โปรดทราบว่าได้go clean -testcache ./...ผลเช่นกัน (ที่ด้านบนสุดของ monorepo)
voutasaurus

ฉันได้เปิดปัญหาเพื่อทำให้ดีขึ้นเช่นกัน: github.com/golang/go/issues/39056?ts=4
wesm

28

ใน Go11 ฉันไม่สามารถปิดการใช้งานแคชโดยใช้GOCACHEกับโมดูลได้ฉันใช้-count=1แทน:

go test -count=1

ก่อน Go11:

GOCACHE=off go test

หรือล้างแคชทดสอบแล้วรันการทดสอบอีกครั้ง:

go clean -testcache && go test 

19

นอกจากนี้ยังมีGOCACHE=offการกล่าวถึงที่นี่


5
สำหรับgo 1.11และมีโมดูลการเดินทางมีเกี่ยวกับการใช้ให้ข้อผิดพลาดGOCACHE=off ที่ดีกว่าคือการใช้ข้อเสนอแนะgo: cannot use modules with build cache disabled -count 1
zdebra

1
คุณพูดถูกตามgithub.com/golang/go/issues/26809#issuecomment-410477084 GOCACHEจะค่อยๆค่อยๆหายไปในช่วง 1.12 ดังนั้นการใช้จึงgo test -count=1 ...เป็นทางเลือกที่ปลอดภัยกว่าในตอนนี้
soltysh

build cache is disabled by GOCACHE=off, but required as of Go 1.12
Francesco Casula

7

วิธีที่ฉันแก้ไขสิ่งนี้ (ฉันใช้ Visual Studio Code บน macOS):

รหัส> การตั้งค่า> การตั้งค่า

คลิก...ที่ด้านขวามือของหน้าการตั้งค่า

คลิก Open settings.json

ทั้ง:

  1. เพิ่มข้อมูลโค้ดต่อไปนี้ในไฟล์ settings.json ของคุณ

    "go.testEnvVars": {
        "GOCACHE": "off"
    }
    
  2. เปลี่ยนค่าของgo.testEnvVarsเพื่อรวมสิ่งต่อไปนี้:"GOCACHE": "off"

5
การสร้างแคชเป็นสิ่งที่จำเป็นสำหรับ Go 1.12 ดังนั้นการตั้งค่าGOCACHEจะใช้ไม่ได้กับ Go เวอร์ชันล่าสุด วิธีแก้ปัญหาสำหรับ VS Code คือการตั้งค่า"go.testFlags": ["-count=1"]ในการตั้งค่า
Armand Grillet
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.