سؤال

أقوم بإعداد مجموعة اختبار وظيفية لتطبيق يقوم بتحميل ملف تكوين خارجي. في الوقت الحالي ، أستخدم وظيفة addasync من Flexunit لتحميلها ثم مرة أخرى لاختبار ما إذا كانت المحتويات تشير إلى الخدمات الموجودة ويمكن الوصول إليها.

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

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

المحلول

على افتراض أنك تستخدم Flexunit 4 ، يمكن استدعاء Addasync من طريقة [beforeclass]:

public class TestFixture
{
    [BeforeClass]
    public static function fixtureSetup() : void
    {
        // This static method will be called once for all the tests
        // You can also use addAsync in here if your setup is asynchronous
        // Any shared state should be stored in static members
    }

    [Test]
    public function particular_value_is_configured() : void
    {
        // Shared state can be accessed from any test
        Assert.assertEquals(staticMember.particularValue, "value");
    }
}

بعد قولي هذا ، يعد اختبار رمز الوصول إلى الملف حقًا اختبار تكامل. أنا أيضًا بالكاد في وضع يسمح له بالتجادل في استخدام Asmock :)

نصائح أخرى

إنه أمر سهل للغاية ، لكنه استغرق مني يومين لمعرفة ذلك. الحل:

تحتاج أولاً إلى إنشاء Var ثابت في مكان ما.

 public static var stage:Stage

يوجد FlexUnitapplication. كما تم إنشاؤه بواسطة FlexUnit Framework ، وفي وظيفة oncreationcomplete () ، يمكنك تعيين المرحلة على المرجع الثابت الذي تم إنشاؤه مسبقًا:

private function onCreationComplete():void
    {
        var testRunner:FlexUnitTestRunnerUIAS=new FlexUnitTestRunnerUIAS();
        testRunner.portNumber=8765; 
        this.addChild(testRunner); 
        testStageRef.stage=stage //***this is what I've added
        testRunner.runWithFlexUnit4Runner(currentRunTestSuite(), "testsuitename");
    }

وعندما يمكنك الوصول إلى المرحلة في البرنامج ، يجب استبدالها بـ:

if(stage==null) stage=testStageRef.stage

يبدو أنك بحاجة إلى إزالة تبعية تحميل هذا الملف الخارجي. إلى حد كبير ، يمكن إزالة جميع الاختبارات aysnchronous من خلال استخدام أ أطراف الاستهزاء. asmock هو خيار رائع لـ Flex. سيسمح لك بتزوير كائن Urloader وإرجاع التكوينات المزيفة لتشغيل الاختبارات الخاصة بك. سوف يساعدك الاستهزاء في كتابة اختبارات وحدة أفضل بكثير حيث يمكنك السخرية من جميع التبعيات المتزامنة أو غير متزامنة.

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