تشغيل جميع اختبارات NUNIT في جميع التجميعات من سطر أوامر Cygwin

StackOverflow https://stackoverflow.com/questions/3619486

سؤال

أحاول إنشاء برنامج نصي قصير يمكن لشخص يمكن أن يعمل في 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 إذا لم تكن ذات صلة وتجميعات فقط القائمة التي سيتم اختبارها دائمًا بغض النظر عن التكوين النشط.

تفحص ال وثائق 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 Console أنا أسلم فقط تلك الإيجابية.

شيء من هذا القبيل:

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

لم يتم اختباره - جربه مثل هذا أولاً لمعرفة ما إذا كان يمنحك الملفات الصحيحة:

find . -name "*.Test*.dll" -path /path/to/skip -prune -o -print
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top