Як запустити тестові справи у вказаному файлі?


205

Мої тестові випадки пакету розкидані по декількох файлах, якщо я запускаю, go test <package_name>він запускає всі тестові випадки в пакеті.

Хоча все-таки запускати їх. Чи є спосіб вказати файл для go testзапуску, щоб він запускав лише тестові випадки, визначені у файлі?

go 

Відповіді:


326

Є два способи. Найпростішим є використання -runпрапора та надання шаблону, що відповідає назвам тестів, які ви хочете запустити.

Приклад:

$ go test -run NameOfTest

Докладнішу інформацію див. У документах .

Інший спосіб - назвати конкретний файл, що містить тести, які потрібно запустити:

$ go test foo_test.go

Але є улов. Це добре працює, якщо:

  • foo.goзнаходиться в package 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. Він не запускає тест. Я хочу використовувати цей тестовий режим, тому що пакет містить багато файлів і вони ще не компілюються, крім утиліти. Тому я хотів би доопрацювати утиліти перед workinqg на інших файлах. Як я можу це зробити?
chmike

Якщо ви хочете побачити, що записано під час тестування, варто згадати -vпрапор (багатослівний). З Документів-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Прапор на насправді приймає регулярний вираз , так що ви можете обмежити випробувальний пробіг до класу тестів. З документів:

-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 on file


2
У Gogland ви можете просто клацнути правою кнопкою миші на тестовому файлі та вибрати "запустити foo_test.go", він створить пакет із тестами, а потім передати регекс, що містить імена всіх тестів у цьому тестовому файлі, до прапора -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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.