是否有Windows批处理文件的单元测试框架?

时间:2011-07-07 14:40:17

标签: unit-testing batch-file automated-tests

我需要一些非常简单的东西,比如“运行此命令,如果在控制台输出中某处存在'此字符串',则会成功,否则会失败”。有这样的工具吗?

3 个答案:

答案 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上的项目站点下载:

https://bitbucket.org/percipio/cmdunit

答案 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