Làm thế nào để chạy các trường hợp thử nghiệm trong một tập tin được chỉ định?


205

Các trường hợp kiểm thử gói của tôi nằm rải rác trên nhiều tệp, nếu tôi chạy go test <package_name>thì nó chạy tất cả các trường hợp kiểm thử trong gói.

Nó là không cần thiết để chạy tất cả chúng mặc dù. Có cách nào để chỉ định một tệp go testđể chạy, để nó chỉ chạy các trường hợp thử nghiệm được xác định trong tệp không?

go 

Câu trả lời:


326

Có hai cách. Cách dễ nhất là sử dụng -runcờ và cung cấp một mẫu khớp với tên của các bài kiểm tra bạn muốn chạy.

Thí dụ:

$ go test -run NameOfTest

Xem tài liệu để biết thêm.

Một cách khác là đặt tên cho tệp cụ thể, chứa các bài kiểm tra bạn muốn chạy:

$ go test foo_test.go

Nhưng có một nhược điểm. Điều này hoạt động tốt nếu:

  • foo.golà trong package foo.
  • foo_test.golà trong package foo_testvà nhập khẩu 'foo'.

Nếu foo_test.gofoo.golà cùng một gói (một trường hợp phổ biến) thì bạn phải đặt tên cho tất cả các tệp khác cần thiết để xây dựng foo_test. Trong ví dụ này, nó sẽ là:

$ go test foo_test.go foo.go

Tôi khuyên bạn nên sử dụng -runmô hình. Hoặc, ở đâu / khi có thể, luôn luôn chạy tất cả các bài kiểm tra gói.


1
-runxin vui lòng để giải thích trên cách đầu tiên (dễ dàng) với xin vui lòng? Tôi không thể tìm thấy bất kỳ tài liệu tham khảo thủ công trên đó.

1
Bạn cũng có thể tìm thông tin về nó vớigo help testflag
Jeffrey Martinez

Khi tôi sử dụng lệnh go test utils.go utils_test.go, đầu ra là ok command-line-arguments 0.002s. Nó không chạy thử nghiệm. Lý do tôi muốn sử dụng chế độ thử nghiệm này là vì gói chứa nhiều tệp và chúng chưa biên dịch ngoại trừ các tiện ích. Vì vậy, tôi muốn hoàn thành các tiện ích trước khi làm việc trên các tệp khác. Làm thế nào tôi có thể làm điều đó ?
chmike

Nếu bạn muốn xem những gì đã đăng nhập khi kiểm tra thì nên nhắc đến -vcờ (dài dòng). Từ các tài liệu-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

Câu trả lời của @ zzzz hầu như đã hoàn tất, nhưng chỉ để cứu người khác khỏi phải tìm hiểu các tài liệu được tham chiếu, bạn có thể chạy thử nghiệm đơn lẻ trong một gói như sau:

go test packageName -run TestName

Lưu ý rằng bạn muốn vượt qua trong tên của thử nghiệm, không phải tên tệp nơi thử nghiệm tồn tại.

Các -runcờ thực sự chấp nhận một regex, do đó bạn có thể giới hạn chạy thử đến một lớp học của các bài kiểm tra. Từ các tài liệu:

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

28
Đáng chú ý rằng tên gói là tên gói hoàn chỉnh, ví dụ: "github.com/you/
ware / a / b / c

1.9.3 cũng chấp nhận đường dẫn tương đối của gói.

2
Không chắc chắn tại sao, nhưng vì một số lý do, tôi nên chỉ định "./" trước tên gói
Roozbeh Zabihollahi

12

Khi chạy một bài kiểm tra duy nhất tôi thường làm:

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

-count 1cũng đảm bảo rằng bài kiểm tra được chạy mỗi lần thay vì được lưu trữ. Hữu ích khi bạn đang kiểm tra các điều kiện cuộc đua và đôi khi chỉ có một bài kiểm tra thất bại. Trong các phiên bản Go không sử dụng các mô-đun, điều tương tự có thể đạt được bằng cách cài đặt GOCACHE=offnhưng điều này tương tác kém với các mô-đun Go.


6

trong plugin intelliJ IDEA go-lang (và tôi giả sử trong jetbrains Gogland), bạn chỉ có thể đặt loại thử nghiệm thành tệp trong khi chạy> chỉnh sửa cấu hình

ảnh chụp màn hình tạo đi kiểm tra trên tập tin đi


2
Trong Gogland, bạn có thể chỉ cần nhấp chuột phải vào tệp thử nghiệm và chọn "chạy foo_test.go", nó sẽ xây dựng gói với các thử nghiệm và sau đó chuyển một biểu thức chính có chứa tên của tất cả các thử nghiệm trong tệp thử nghiệm đó sang cờ -sl. Một tính năng thực sự hữu ích.
Eloff

4
alias testcases="sed -n 's/func.*\(Test.*\)(.*/\1/p' | xargs | sed 's/ /|/g'"

go test -v -run $(cat coordinator_test.go | testcases)

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

Ngăn chặn bộ nhớ đệm của kết quả kiểm tra.

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

0
go test -v -timeout 30s <path_to_package> -run ^(TestFuncRegEx)
  • TestFunc phải nằm trong gotệp kiểm tra trong gói đó
  • Chúng tôi có thể cung cấp một biểu thức chính quy để khớp với một tập hợp các trường hợp thử nghiệm hoặc chỉ chức năng của trường hợp thử nghiệm chính xác để chạy một trường hợp thử nghiệm duy nhất. Ví dụ-run TestCaseFunc
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.