كيف يمكنني تحديد معلمات طريقة الاختبار مع testdriven.net؟

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

سؤال

أنا أكتب اختبارات الوحدة مع Nunit و TestDriven.net البرنامج المساعد. أرغب في تقديم معلمات لطريقة اختبار مثل هذا:

[TestFixture]
public class MyTests
{
    [Test]
    public void TestLogin(string userName, string password)
    {
        // ...
    }

    ...
}

كما ترون ، هذه المعلمات عبارة عن بيانات خاصة ، لذلك لا أريد أن أرفقها أو وضعها في ملف. في الواقع لا أريد أن أكتبها في أى مكان, ، أريد أن أطلب منه في كل مرة أقوم فيها بإجراء الاختبار.

عندما أحاول إجراء هذا الاختبار ، أحصل على الرسالة التالية في نافذة الإخراج:

testcase 'myProject.mytests.testlogin' لم يتم تنفيذه: لم يتم تقديم أي حجج

إذن سؤالي هو ، كيف يمكنني تقديم هذه المعلمات؟ كنت أتوقع أن يعرض TestDriven.net موجهًا حتى أتمكن من إدخال القيم ، لكنه لم يفعل ...

آسف إذا بدا سؤالي غبيًا ، فربما تكون الإجابة بسيطة للغاية ، لكنني لم أتمكن من العثور على أي شيء مفيد على Google ...


تحرير: لقد وجدت للتو طريقة للقيام بذلك ، لكنها خدعة قذرة ...

    [Test, TestCaseSource("PromptCredentials")]
    public void TestLogin(string userName, string password)
    {
        // ...
    }

    static object[] PromptCredentials
    {
        get
        {
            string userName = Interaction.InputBox("Enter user name", "Test parameters", "", -1, -1);
            string password = Interaction.InputBox("Enter password", "Test parameters", "", -1, -1);
            return new object[]
            {
                new object[] { userName, password }
            };
        }
    }

ما زلت مهتمًا بحل أفضل ...

هل كانت مفيدة؟

المحلول

يجب أن لا تأخذ اختبارات الوحدة عادة أي معلمات. يمكنك إنشاء البيانات اللازمة داخل الاختبار نفسه.

  • القيمة المتوقعة
  • يمكنك استدعاء طريقتك التي تريد اختبار تمرير الوسائط اللازمة
  • يمكنك مقارنة النتيجة بالقيمة المتوقعة والقيمة التي تم إرجاعها من طريقة اختبارك

لا تسمح اختبارات وحدة MS باختبار المعلمات. بدلاً من ذلك تحتاج إلى إنشاء اختبارات وحدة DataDriven. جرب الرابط ، قد يساعدك.

كما ذكرت. لن أعلن أن تمرير الحجج إلى اختبارات الوحدة نفسها ممارسة جيدة.


تحديث: كنت صغيرا :). فكر في إجابة سارفراز بدلاً من ذلك حول كيفية تمرير المعلمات إلى اختبارات NUNIT.

نصائح أخرى

استخدم ال حالة اختبار ينسب.

[TestCase("User1", "")]
[TestCase("", "Pass123")]
[TestCase("xxxxxx", "xxxxxx")]
public void TestLogin(string userName, string password)
{
    // ...
}

أعتقد أنه يمكنك حل هذه المشكلة باستخدام المكون الإضافي Rowtest لـ Nunit الموجود هنا http://www.andreas-schlapsi.com/2008/01/29/RowTest-Actension-120/

يمكنك إنشاء اختبارات بسيطة تعتمد على البيانات حيث يتم توفير بيانات الاختبار بواسطة سمات [ROW]. لذا ، إليك مثال على اختبار يتم تشغيله مرارًا وتكرارًا مع معلمات مختلفة:

[TestFixture]
public class RowTestSample
{
 [RowTest]
 [Row( 1000, 10, 100.0000)]
 [Row(-1000, 10, -100.0000)]
 [Row( 1000, 7, 142.85715)]
 [Row( 1000, 0.00001, 100000000)]
 [Row(4195835, 3145729, 1.3338196)]
 public void DivisionTest(double numerator, double denominator, double result)
 {
    Assert.AreEqual(result, numerator / denominator, 0.00001);
 }
} 

وأنا أتفق مع الإجابات الأخرى على أن تمرير الوسائط قد لا يكون أفضل الممارسات ، ولكن لا توجد بيانات اعتماد ترميز صعبة أو عناوين الخادم التي قد تتغير في مرحلة ما.

مستوحاة من الحل المقترح المعني ، أقرأ ببساطة إدخال وحدة التحكم بدلاً من استخدام مربعات الإدخال. يتم حفظ الحجج في ملف. عند بدء الاختبارات ، يتم إعادة توجيه الملف وقراءته من بعض وظائف التهيئة التي يجب استدعاؤها قبل تشغيل أي حالات اختبار.

nunit tests.dll < test.config

هذا يتجنب تفاعل المستخدم ويجب تشغيله بواسطة أي برنامج نصي أتمتة. الجانب السلبي هو أنه لا يزال يتعين حفظ كلمة المرور في مكان ما ، ولكن على الأقل يمكن حفظها محليًا على آلة المختبرين ويسهل تغييرها.

كان هذا لمشروع ، حيث تم استخدام أوراق Excel التي تحتوي على الاختبارات (وليس اختبارات الوحدة بحكم التعريف) للسماح للآخرين بإنشاء حالات اختبار لمشروع جانب خادم أكبر دون تغيير أي رمز. كان من الضروري أن يتم إجبار جميع حالات الاختبار في ورقة Excel عملاقة واحدة. أيضا لم يكن هناك CI ، فقط العديد من بيئات الاختبار على خوادم مختلفة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top