تشغيل جميع اختبارات NUNIT في جميع التجميعات من سطر أوامر Cygwin
-
26-09-2019 - |
سؤال
أحاول إنشاء برنامج نصي قصير يمكن لشخص يمكن أن يعمل في Cygwin لتنفيذ جميع اختبارات NUNIT في مشروع .NET باستخدام Nunit-Console. حاليًا لدي إصدار نظام من Nunit Aliased إلى "Nunit" ، لذا إذا قمت بتشغيل "Nunit" ، فسيقوم بتنفيذ Nunit-Console.
كانت خطوتي الأولى هي محاولة العثور على جميع مجموعات الاختبار بشكل متكرر. هذا يعمل في الغالب:
find . -name *.Test*.dll
لكنه يعيد كلا /OBJ و /bin إصدارات DLL.
ثانياً ، أحتاج إلى اكتشاف طريقة لتمرير جميع النتائج من تلك الاكتشاف إلى Nunit ، ويفضل أن يكون ذلك في تنفيذ واحد حتى الآن ليس لدي أدنى فكرة عن كيفية القيام به.
أي معلمون cygwin / bash هناك يمكن أن تساعد؟
المحلول
هل تتغير قائمة التجميعات ديناميكيًا؟ إذا لم يتغير ذلك في كثير من الأحيان ، فربما لا تحتاج إلى تحديد التجميعات التي يجب تشغيلها في وقت التشغيل. بدلاً من ذلك ، يتم حل مشكلتك بشكل أفضل من خلال استخدام مشروع 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-Console. سيقوم Nunit بإجراء جميع الاختبارات في مجموعات التطبيق ومجموعات القطعة ، في مجلد التصحيح. يمكنك أيضًا حذف أشياء Config و ActivEconFig إذا لم تكن ذات صلة وتجميعات فقط القائمة التي سيتم اختبارها دائمًا بغض النظر عن التكوين النشط.
نصائح أخرى
هذا هو البرنامج النصي الخاص بي لهذا
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 Console أنا أسلم فقط تلك الإيجابية.
شيء من هذا القبيل:
find . -name "*.Test*.dll" -path /path/to/skip -prune -o -exec nunit {} \;
لم يتم اختباره - جربه مثل هذا أولاً لمعرفة ما إذا كان يمنحك الملفات الصحيحة:
find . -name "*.Test*.dll" -path /path/to/skip -prune -o -print