Неожиданное исключение Spock MissingMethodException с File.createTempFile () - PullRequest
0 голосов
/ 30 января 2020

У меня есть эти строки в given блоке теста / функции:

log.debug( "subdir1 |$subdir1| class ${subdir1.class}")
File.createTempFile​( 'blub', 'odt', subdir1 )

Сообщение журнала:

2020-01-30 08:34:47,433 - 1404 ms [Test worker] DEBUG core.IndexCreationSpec [core.IndexCreationSpec] $spock_feature_1_26:706 
subdir1 |/tmp/junit8540540913300320698/subdir1| class class java.io.File

Но я получаю следующий Спок ошибка в строке createTempFile:

groovy .lang.MissingMethodException: Нет подписи метода: static java .io.File.createTempFile () применимо для типов аргументов: ( Значения String, String, File): [blub, odt, / tmp / junit8540540913300320698 / subdir1] Возможные решения: createTempFile (java .lang.String, java .lang.String, java .io.File), createTempFile (java .lang.String, java .lang.String), createNewFile (), createTempDir (), createTempDir (java .lang.String, java .lang.String)

Этот метод File я не очень часто использую. Есть обходные пути для создания файлов с временными именами файлов. Но я просто сбит с толку неудачей Спока. Это ошибка Спока (т.е. я должен отправить отчет об ошибке)?

Обновление: анализ классов строк

def blub = 'blub'
log.debug( "blub |$blub| class ${blub.class} class2 ${'blub'.class}")

2020-01-30 09:52:34,187 - 1375 ms [Test worker] DEBUG core.IndexCreationSpec [core.IndexCreationSpec] $spock_feature_1_26:709
blub |blub| class class java.lang.String class2 class java.lang.String

1 Ответ

2 голосов
/ 30 января 2020

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

Каким-то образом загадочный символ Unicode, u200B, «пробел нулевой ширины» сам поскользнулся от File.createTempFile до (.

Устранение этой проблемы решило проблему! Казалось бы, это считается частью метода, который я пытался вызвать. Если бы я уделил больше внимания форматированию Groovy (Eclipse, см. Мой ответ здесь ), я бы заметил, что оно было подчеркнуто (= "нераспознанный метод"), когда оно должно было быть подчеркнуто и c (= "распознанный статус c метод").

...