Если нельзя, но очень хочется, то нужно обязательно и ничего в мире не стоит того, чтобы делать из этого проблему!


Интересна Java? Кликай по ссылке и изучай!
Если тебе полезно что-то из того, чем я делюсь в своем блоге - можешь поделиться своими деньгами со мной.
с пожеланием
столько времени читатели провели на блоге - 
сейчас онлайн - 

воскресенье, 20 января 2013 г.

Approval testing: Как переименовать часть имени файла с помощью BAT

Возникла задача. Использую Approval testing в тестировании. Очень удобная тула. Кому интересно - смотрим тут.

В процессе работы с этим фреймворком, когда тесты проходят - создаются файлы с именем <testclass>.<testname>.approve.txt - эти файлы содержат строку, которую мы в конце теста скормили фреймворку, чтобы он ее заапрувил. На самом деле аппрувлю ее я, и когда я аппрувлю строку - она попадает в *.approve.txt файл. Это такой себе аналог assertEqials в jUnit, только зачение expected сохраняется в отдельный файл после того, как я его заапрувлю.

Но в момент когда тест слетает, рядом создается другой файл *.received.txt и в него записывается информация о том, что реально пришло от тестируемого модуля. Мне же после отработки тестов запускается ряд (для каждого слетевшего теста) окон Tortoise diff и могу сравнить их и выбрать правильный. Такой способ принятия решений более удобный чем орудовать со строками в assertEquals.

Пример использования такой - я вдруг решил что хочу чтобы не "?" выводились, а "." причем от этого зависит пяток тестов. Что делать? Ручками править все assertEquals? Неее...

Переписывать мне ассерт пришлось бы в тесте очень долго, а тут я кликаю одну кнопку и файл approve обновляется.

Беда, когда я что-то меняют и слетает пару десятков тестов. Тогда не очень удобно 20 раз кликать на кнопку "сохранить", особенно если я знаю, что новое изменение - ок. Итого у меня есть пары файлов *.approve.txt и *.received.txt и я хочу удалить все старые аппрувы и заменить их новыми received.
Мне в этом поможет простой bat file. Вернее не простой, а такой
@echo off
setlocal enableDelayedExpansion
for %%F in (*.received.txt) do (
  set "name=%%F"
  move /Y "%%F" "!name:~0,-13!.approved.txt"
)
Расшифрую немного его. Мы проходимся по всем файлам *.received.txt, зносим ихние имена по очереди в переменную name. После чего выполняем команду move /Y, что значит мы хотим переместить с заменой файл с исходным именем %%F на файл сформированный в "!name:~0,-13!.approved.txt".

Последняя команда очень интеерсна - ее формат s:~a,b, где s - строка, a и b - позиции символов в строке. В результате мы получим подстроку начинающуюся с символа под номером а (нумерация начинается с 0) и длинной b. Но это, если a и b имеют положительные значения. Если же указать только s:~-a, то команда выкусит только a последних символов. Если же s:~a,-b, то выкусит подстроку начиная с a-того и до конца за вычетом b последних символов.

Пару примеров для понимания
D:\>set var=abcdefghijklmnopqrstuvwxyz0123456789.someext

D:\>echo %var:~0,5%
abcde

D:\>echo %var:~1,5%
bcdef

D:\>echo %var:~1,8%
bcdefghi

D:\>echo %var:~3,8%
defghijk

D:\>echo %var:~-4%
eext

D:\>echo %var:~-9%
9.someext

D:\>echo %var:~0,-1%
abcdefghijklmnopqrstuvwxyz0123456789.someex

D:\>echo %var:~0,-7%
abcdefghijklmnopqrstuvwxyz0123456789.

D:\>echo %var:~7,-7%
hijklmnopqrstuvwxyz0123456789.
Вроде как все...

Комментариев нет:

Отправить комментарий