Domanda

Sono la creazione di una suite di test funzionali per un'applicazione che carica un file di configurazione esterno. In questo momento, sto usando la funzione di addAsync FlexUnit per caricarlo e poi di nuovo per verificare se il contenuto indicano i servizi che esistono e si può accedere.

Il problema di questo è che avere questo tipo di due (o più) i mezzi di metodo fase che sto correndo tutti i miei test nel contesto di un test con decine di asserisce, che sembra una sorta di modo degenerato per utilizzare il framework, e rende i bug difficili da trovare. C'è un modo per avere qualcosa di simile a un setup asincrono? C'è un altro framework di test che gestisce questo meglio?

È stato utile?

Soluzione

Supponendo che si sta utilizzando FlexUnit 4, addAsync può essere chiamato da un metodo [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");
    }
}

Detto questo, testare il codice che accede a un file è in realtà un test di integrazione. Sono anche a malapena in grado di argomentare contro l'uso ASMock:)

Altri suggerimenti

E 'abbastanza facile, ma mi ci sono voluti 2 giorni per capirlo. La soluzione:

Per prima cosa è necessario creare una var qualche parte statica.

 public static var stage:Stage

C'è un FlexUnitApplication.as fissate dal quadro FlexUnit, e alla funzione onCreationComplete (), è possibile impostare il palco per il riferimento statico creato in precedenza:

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");
    }

e quando si desidera accedere alla fase del programma, è necessario sostituirlo a:

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

Sembra che avete bisogno per rimuovere la dipendenza del carico che file esterno. Praticamente tutti i test Aysnchronous possono essere rimossi attraverso l'uso di un scherno quadri . ASMock è una scelta impressionante per Flex. Essa vi permetterà di falsificare l'oggetto URLoader e il ritorno falsificate configurazioni per eseguire i test contro. Beffardo aiuterà con la scrittura molto meglio unit test, come si può prendere in giro tutte le dipendenze sincrona o asincrona.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top