Cygwin コマンドラインからすべてのアセンブリですべての NUnit テストを実行する
-
26-09-2019 - |
質問
nunit-console を使用して .NET プロジェクト内のすべての nunit テストを実行するために、誰かが cygwin で実行できる短い bash スクリプトを作成しようとしています。現在、私はnunitのシステムバージョンを「nunit」にエイリアスしているので、「nunit」を実行するとnunit-consoleが実行されます。
私の最初のステップは、すべてのテスト アセンブリを再帰的に検索することでした。これはほとんどの場合うまくいきます:
find . -name *.Test*.dll
ただし、/obj バージョンと /bin バージョンの DLL の両方が返されます。
次に、そのfindからのすべての結果をnunitに渡す方法を、できれば1回の実行で渡す方法を見つける必要がありますが、これまでのところ方法がわかりません。
助けてくれる cygwin / bash の専門家はいますか?
解決
アセンブリのリストが動的に変化していますか?それは頻繁に変更されない場合、あなたはおそらく、アセンブリが実行時に実行するかを決定する必要はありません。むしろ、あなたの問題は、より良い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を実行するには、Debugフォルダに、アプリケーションやウィジェットアセンブリ内のすべてのテストを実行します。それは関係なく、常にアクティブなコンフィギュレーションのテストされ、関連するとちょうどリストアセンブリではない場合にも、コンフィグとactiveconfigのものを省略することができます。
NUnitのドキュメントを参照してください>。
他のヒント
これが私の作業スクリプトです
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 自体の実行に問題があることを示しています (「 この質問 詳細については)。この問題の回避策が見つからなかったので、ビルド サーバーでのみネガティブ エラー コード チェックを行っています。ローカルでは bash コンソールからポジティブなものだけを渡しています。
このような何かます:
find . -name "*.Test*.dll" -path /path/to/skip -prune -o -exec nunit {} \;
テストされていない - それはあなたが正しいファイルを与えるかどうかを確認するために、この最初のようにそれを試してみます:
find . -name "*.Test*.dll" -path /path/to/skip -prune -o -print