代码之家  ›  专栏  ›  技术社区  ›  JoshReedSchramm

从Cygwin命令行在所有程序集中运行所有NUnit测试

  •  1
  • JoshReedSchramm  · 技术社区  · 15 年前

    我正在尝试创建一个简短的bash脚本,有人可以在cygwin中运行,使用nunit控制台执行.NET项目中的所有nunit测试。目前我有nunit的系统版本别名为“nunit”,所以如果我运行“nunit”,它将执行nunit控制台。

    我的第一步是尝试递归地查找所有测试程序集。这主要起作用:

    find . -name *.Test*.dll
    

    但它同时返回dll的/obj和/bin版本。

    第二,我需要找出一种方法,将这个发现的所有结果传递给nunit,最好是一次执行,到目前为止我还不知道该怎么做。

    有没有能帮上忙的cygwin/bash大师?

    3 回复  |  直到 15 年前
        1
  •  4
  •   imoatama    15 年前

    程序集列表是否动态更改?如果不经常更改,则可能不需要确定在运行时运行哪些程序集。相反,通过使用NUnit项目可以更好地解决您的问题。例如,创建文件测试.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控制台测试.nunit将运行调试文件夹中的应用程序和小部件程序集中的所有测试。如果Config和activeconfig不相关,您也可以省略它们,只列出将始终进行测试的程序集,而不管活动配置如何。

    查看 NUnit documentation on running on multiple assemblies

        2
  •  1
  •   Community CDub    8 年前

    这是我的工作脚本

    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控制台上,我只处理积极的。

        3
  •  0
  •   Dennis Williamson    15 年前

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

    未测试-先这样尝试,看看它是否提供了正确的文件:

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