Ответ Дэвида, конечно, правильный, но не совсем объясняет, зачем вам это нужно.
В принципе, при модульном тестировании вы тестируете единицу функциональности в изоляции. Вы проверяете, выводит ли вход ожидаемый результат. Иногда вы также должны испытывать побочные эффекты. Вкратце, проверьте, позволяет это сделать.
Например, у вас есть бит бизнес-логики, который должен хранить вещи с помощью DAO. Вы можете сделать это с помощью теста интеграции, который создает экземпляр DAO, подключает его к бизнес-логике и затем запихивает в базу данных, чтобы узнать, сохранен ли ожидаемый материал. Это уже не единичный тест.
Или вы можете издеваться над DAO и убедиться, что он вызван так, как вы ожидаете. С помощью mockito вы можете проверить, что что-то вызывается, как часто оно называется, и даже использовать сопоставления по параметрам, чтобы гарантировать, что он будет вызван определенным образом.
Откидная сторона модульного тестирования, как это, действительно что вы связываете тесты с реализацией, что делает рефакторинг немного сложнее. С другой стороны, хороший дизайн-запах - это количество кода, которое требуется для правильного его использования. Если ваши тесты должны быть очень длинными, возможно, что-то не так с дизайном. Поэтому код с большим количеством побочных эффектов / сложных взаимодействий, которые необходимо протестировать, вероятно, не очень хорошо.
Это зависит от того, как Вы хотите использовать переменную. Если Вы просто хотите использовать значение переменной без кавычек, можно использовать или задержанное расширение и строковую замену, или эти for
команда:
@echo OFF
SETLOCAL enabledelayedexpansion
set myvar="C:\my music & videos"
Как andynormancx состояния, кавычки необходимы, так как строка содержит &
. Или можно выйти из него с эти ^
, но я думаю, что кавычки являются немного более чистыми.
при использовании задержанного расширения со строковой заменой Вы получаете значение переменной без кавычек:
@echo !myvar:"=!
>>> C:\my music & videos
можно также использовать эти for
команда:
for /f "tokens=* delims=" %%P in (%myvar%) do (
@echo %%P
)
>>> C:\my music & videos
Однако, если Вы хотите использовать переменную в команде, необходимо использовать заключенное в кавычки значение или включить значение переменной в кавычках:
Используя строковую замену и задержанное расширение, чтобы использовать значение переменной без кавычек, но использовать переменную в команде:
@echo OFF
SETLOCAL enabledelayedexpansion
set myvar="C:\my music & videos"
md %myvar%
@echo !myvar:"=! created.
Используя эти for
команда для использования значения переменной без кавычек но необходимо будет окружить переменную кавычками при использовании его в командах:
@echo OFF
set myvar="C:\my music & videos"
for /f "tokens=* delims=" %%P in (%myvar%) do (
md "%%P"
@echo %%P created.
)
, Короче говоря, нет действительно никакого очевидного способа для использования пути или имени файла, которое содержит встроенные пробелы и/или &
с в пакетном файле.
Попытайтесь использовать символ ESC '^ ', например,
set myvar=c:\my music ^& videos
Вы сделаете, чтобы Вы были осторожны, при расширении myvar, потому что оболочка не могла бы рассматривать & как литерал. Если вышеупомянутое не работает, попытайтесь вставить каре в строку также:
set myvar=c:\my music ^^^& videos
Используйте jscript.
Много лун назад (т.е. приблизительно 8 лет плюс-минус) я работал над большим C++/VB6 проект, и у меня были различные биты Сценария пакетной обработки, чтобы внести свой вклад сборки.
Затем кто-то указал на меня на Тест Joel , я был особенно очарован из точки 2 и приступил к обеспечению всех, что мои мало встраивают сценарии в один единственный сценарий сборки...
и это почти разбило мое сердце, получив все те небольшие сценарии сотрудничество, на различных машинах, с немного отличающимися установками, Вы Боги, это было ужасно - особенно установка переменных и передачи параметров. Это было действительно хрупким, малейшая вещь повредит его и потребует, чтобы 30 минут тонкой настройки начались снова.
В конечном счете - я могу быть упрямым меня - я отказался от всех, и приблизительно за день переписал все это в JavaScript, выполнив его от командной строки с CScript.
я не оглянулся назад. Хотя в эти дни это - MSBuild и Круиз-контроль, если я должен сделать что-то даже немного связанное со сценарием пакетной обработки, я использую jscript.
Вы должны иметь кавычки, если текст, который Вы устанавливаете, включает определенные символы, включая & . Если Ваш текст не включал & затем Вам не были бы нужны кавычки.
, Например, если текст был просто "c:\my music" затем, Вы могли бы сделать:
set myvar = c:\my music
, Но потому что Ваш текст имеет & Вам нужны кавычки.
Редактирование:
Или поскольку Dave говорит в своем ответе, можно выйти из проблемных символов с [1 111] ^^^, но остерегаться того подхода как [1 112] & не единственный символ, из которого необходимо выйти. На практике намного легче придерживаться кавычек вместо того, чтобы выйти из всех проблемных символов.