У меня вопрос о методах тестирования работы со строками. Каждый раз я пишу новый тест для метода, который имеет строку в качестве параметра.
Теперь возникают некоторые проблемы:
Итак ... каковы ваши подходы к решению этой проблемы?




\n, \r\n, \r\n\r) для разных ОСЭто вопрос удобства. Если вы считаете, что они достаточно длинные, чтобы вставить внешний файл и начать работу с вводом-выводом в тестах, сделайте это. В противном случае да, оставьте их в тестах, но аккуратно их организовывайте.
How to include a test string with \n, \r, \t, umlauts etc?
Гм ... просто напечатай так, как хочешь? Вы можете использовать \ n, \ r и \ t, умляуты stc. в строковых литералах Java; если вас беспокоит кодировка файла исходного кода, вы можете использовать Управляющие последовательности Unicode, и вы можете создавать их с помощью инструмента native2ascii, который поставляется с JDK.
How to set the encoding?
Когда у вас есть Java String, слишком поздно беспокоиться о кодировках - они используют UTF-16, и любые проблемы с кодированием возникают при переводе между строками и байтовыми массивами (в отличие от C, Java четко разделяет эти концепции)
Редактировать:
Если ваши строки слишком велики, чтобы их можно было удобно использовать в исходном коде, или вы действительно беспокоитесь об обработке разрывов строк и пробелов, то, вероятно, лучше всего хранить каждую строку в отдельном файле; в этом случае кодировка должна быть указана при чтении файла (в конструкторе InputStreamReader)
Вы можете использовать язык сценариев для написания тестов.
JRuby и Groovy поддерживают документы ЗДЕСЬ, которые упрощают определение большой строки, охватывающей несколько строк.
# In JRuby
mystring = <<EOS
This is a long string that
spans multiple lines.
EOS
# In Groovy
def mystring = """This is a long string that
spans multiple lines."""
Это также упростит написание вашего тестового кода, поскольку в обоих языках есть много ярлыков, которые помогают писать более простой код (но некоторые могут сказать, что он менее надежен, что не имеет большого значения, если это только код модульного тестирования).
Я не понимаю твоего представления. Зачем мне сценарий тест для класса Java?
Не сценарий, а для написания собственно теста на Groovy / JRuby. Не уверен насчет JRuby, но у вас есть возможность взаимодействия с Java в Groovy, и поэтому вы можете тестировать свои классы с помощью Groovy.
Если вы неоднократно используете символы, которые трудно выразить в буквальных строках (например, ", \, символы не в [ -~]), то вам может потребоваться выполнить быстрый поиск и замену строки перед ее использованием. Например, если вы используете \ a lot, вы можете написать функцию для обмена \ и /. Вы можете использовать многосимвольную последовательность для представления символов с диакритическими знаками.
Однако существует очевидная опасность получить решение, несоразмерное проблеме. Иногда \u#### просто проще.
Если вы собираетесь использовать файлы, отличные от Java, я предлагаю открывать их как ресурсы (Class.getResourceAsStream / getResource), а не как отдельные файлы.
Для БОЛЬШИХ строк я бы использовал файлы. Производительность достаточно высока для модульных тестов. Для этого небольшого компромисса вы:
Итак, вы предлагаете использовать строковые литералы в модульных тестах? Даже если они слишком длинные (например, 200 строк?)