Почему пакет тестирования golang заменяет пробелы символами подчеркивания при сообщении об ошибках теста? - PullRequest
0 голосов
/ 19 сентября 2018

Когда я запускаю этот тест, и он не проходит:

func TestCaseA(t *testing.T){
    t.Run("my name with spaces", func (t *testing.T){
        t.Error("some error message")
    })
}

, тогда имя теста изменяется (пробелы меняются на подчеркивания) в выводе:

--- FAIL: TestCaseA (0.00s)
    --- FAIL: TestCaseA/my_name_with_spaces (0.00s)
        main.go:10: some error message
FAIL

Почемуэто делает это?

Вот рабочий пример: https://play.golang.org/p/viZjC60Dazg

Ответы [ 2 ]

0 голосов
/ 19 сентября 2018

Это объясняется в этом сообщении в блоге: https://blog.golang.org/subtests

Полное имя подтеста или суб-теста представляет собой разделенный слешами список его имени и имен всех его родителей,начиная с верхнего уровня.Имя - это имя соответствующей функции для тестов и тестов верхнего уровня, и первый аргумент для запуска в противном случае.Чтобы избежать проблем с отображением и анализом, имя очищается путем замены пробелов подчеркиванием и экранирования непечатных символов.То же очищение применяется к регулярным выражениям, передаваемым флагам -run или -bench.

В некоторых примерах автоматизированные инструменты могут упростить обработку результатов теста, чтобы избежать проблем сОболочка, создающая аргументы регулярного выражения, содержащие пробелы в виде нескольких аргументов и т. д. Я бы предпочел не использовать пробелы, чем иметь дело с этим волшебным переименованием.

0 голосов
/ 19 сентября 2018

Я нашел самый точный ответ, который я мог, конечно, в самом коде.Комментарий функции rewrite гласит:

rewrite перезаписывает поднаименование так, что оно содержит только печатные символы без пробелов.

https://golang.org/src/testing/match.go#L133

Что касаетсяЗачем?Я предполагаю, что ДжимБ ударил по голове гвоздем со своим комментарием:

А почему, может быть, потому, что в клике проще ссылаться на имена без пробелов?

Пробелы вредны для кли.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...