我需要一些非常简单的东西,比如“运行此命令,如果在控制台输出中某处存在'此字符串',则会成功,否则会失败”。有这样的工具吗?
答案 0 :(得分:5)
不是我知道的,但您可以轻松地在另一个批处理脚本中编写一个。
call TestBatchScript.cmd > console_output.txt
findstr /C:"this string" console_output.txt
如果找到字符串,将%errorlevel%设置为零,如果字符串不存在,则将非零值设置为非零。然后,您可以使用IF ERRORLEVEL 1 goto :fail
对其进行测试,并在:fail
标签后执行您想要的任何代码。
如果要对几个这样的字符串进行紧凑评估,可以使用||语法:
call TestBatchScript.cmd > console_output.txt
findstr /C:"teststring1" console_output.txt || goto :fail
findstr /C:"teststring2" console_output.txt || goto :fail
findstr /C:"teststring3" console_output.txt || goto :fail
findstr /C:"teststring4" console_output.txt || goto :fail
goto :eof
:fail
echo You Suck!
goto :eof
或者,您可以更进一步,阅读文件中的字符串列表
call TestBatchScript.cmd > console_output.txt
set success=1
for /f "tokens=*" %%a in (teststrings.txt) do findstr /C:"%%a" console_output.txt || call :fail %%a
if %success% NEQ 1 echo You Suck!
goto :eof
:fail
echo Didn't find string "%*"
set success=0
goto :eof
答案 1 :(得分:2)
我已经为Windows批量单元测试创建了一个库。它目前还处于起步阶段,但它有效并且我使用它。
它被称为cmdUnit,它可以从bitbucket上的项目站点下载:
答案 2 :(得分:2)
我对filter类型命令使用以下命令:
对于批处理文件foo.cmd
,请创建以下文件:
foo.in.txt
:
喂
foo.expected.txt
:
你好世界
foo.test.cmd
:
@echo off
echo Testing foo.cmd ^< foo.in.txt ^> foo.out.txt
call foo.cmd < foo.in.txt > foo.out.txt || exit /b 1
:: fc compares the output and the expected output files:
call fc foo.out.txt foo.expected.txt || exit /b 1
exit /b 0
然后运行foo.test.cmd