2010-09-01 77 views
1

我试图创建一个简短的bash脚本,有人可以在cygwin中运行,以使用nunit-console在.NET项目中执行所有的nunit测试。目前我有系统版本的nunit别名为“nunit”,所以如果我运行“nunit”,它将执行nunit-console。从Cygwin命令行运行所有程序集中的所有NUnit测试

我的第一步是尝试递归地找到所有测试程序集。这大部分工作:

find . -name *.Test*.dll 

但它返回一个DLL的/ obj和/ bin版本。

第二我需要找出一种方法来将所有结果从那个发现传递给nunit,最好是在一个执行过程中,目前为止我不知道该怎么做。

任何cygwin/bash大师在那里可以帮助吗?

回答

4

是否组件列表中动态地改变?如果它不经常改变,那么你可能不需要确定在运行时运行什么程序集。相反,通过使用NUnit项目可以更好地解决您的问题。例如,创建文件tests.nunit,与内容:

<NUnitProject> 
    <Settings activeconfig="Debug"/> 
    <Config name="Debug"> 
    <assembly path="ProjectA\bin\Debug\App.dll"/> 
    <assembly path="ProjectB\bin\Debug\Widget.dll"/> 
    </Config> 
    <Config name="Release"> 
    <assembly path="ProjectA\bin\Release\App.dll"/> 
    <assembly path="ProjectB\bin\Release\Widget.dll"/> 
    </Config> 
</NUnitProject> 

运行NUnit控制台tests.nunit将运行在App和Widget组件的全部测试,在Debug文件夹中。你也可以省略Config和activeconfig的东西,如果它不相关,并且只是列表程序集,不管活动配置如何,它总会被测试。

查看NUnit documentation on running on multiple assemblies

+0

呵呵不知道这个。这可能会完成根本目标。谢谢。 – JoshReedSchramm 2010-09-08 13:31:47

0

事情是这样的:

find . -name "*.Test*.dll" -path /path/to/skip -prune -o -exec nunit {} \; 

未经检验的 - 尝试这样的第一,看它是否给你正确的文件:

find . -name "*.Test*.dll" -path /path/to/skip -prune -o -print 
+0

没有这个运气。就像它输出大量文件不仅仅是Test * .dll当我摆脱了-o它不打印任何东西。没有-path -prune -o如果我执行结果反对nunit我得到“没有这样的文件或目录”为每个条目。 – JoshReedSchramm 2010-09-02 13:36:06

1

下面是该

check_err() 
{ 
    # parameter 1 is last exit code 
    # parameter 2 is error message that should be shown if error code is not 0 
    if [ "${1}" -ne "0" ]; then 
     cat '~temp.log' 
     echo ${2} 
     rm -f '~temp.log' > /dev/null 
     exit ${1} 
    fi; 
    rm -f '~temp.log' > /dev/null 
} 

for i in `find . -print | grep 'bin/Debug/[^/]*\.Tests\.dll$'`; do 
    echo "Running tests from ${i} with NUnit..."; 
    cmd.exe /c "Lib\NUnit\nunit-console.exe ${i} /framework:net-4.0" > '~temp.log' 
    check_err $? "Some tests failed." 
done 

我工作的脚本,但有一个微妙的问题。 NUnit有时会返回负面的错误代码,这对Windows而言是正确的,但对于* nix是非法的。我不知道Cygwin如何使用负退出码,但MinGW32将它们视为0,即"$?" == "0"

好消息,负面的错误代码对于NUnit来说是比较少见的,并且指示运行NUnit本身时出现问题(有关详细信息,请参阅this question)。我没有找到这个问题的解决方法,所以我只在构建服务器上检查了负面的错误代码。本地从bash控制台,我只处理积极的。