Test dell'unità per modulo in ZF2

2

Questa domanda riguarda la gestione degli spazi dei nomi e dei test unitari in ZF2.

Diciamo che ho un modulo chiamato Application . Ho costruito composer.json per essere così

"autoload":{
   "psr-4": {
      "Application\" : ["module/Application/src", "module/Application"],
   }
} 

dove il primo percorso è per il codice principale nella cartella src come da PSR-4, e il secondo percorso è utilizzato accesso test namespace.

Quello che ottengo è questa struttura di directory:

module
    /Application
        /public
        /src
            /Form
                Form.php  //namespace Application\Form;
            /test
                /Form
                    FormTest.php  //namespace Application\test\Form
        /test
            /Form
                FormTest.php  //namespace Application\test\Form;

Funziona, e sembra funzionare sia in Zend Studio, sia in PHP-CLI (riga di comando). Per la classe FormTest.php , quella in src ha priorità nonostante entrambi si trovino nello stesso spazio dei nomi. Li ho messi entrambi solo per un esempio che posso usare in entrambe le posizioni.

Domanda: Sono preoccupato che avere due percorsi nel compositore causi un lavoro extra per il risolutore del nome della classe, cioè quando la classe non viene trovata in modo pulito, in src , ZF2 fa una ricerca in test .

Posso migliorare il codice? È preferibile utilizzare solo lo spazio dei nomi src e spostare il mio test in src/test directory e spazio dei nomi? Cioè, sbarazzarsi della cartella module/Application/test e mantenere module/Application/src/test ? Esistono le best practice consigliate per questo?

    
posta Dennis 05.05.2016 - 16:25
fonte

1 risposta

4

Di solito mantengo tests e src completamente indipendenti, e non annidati l'uno sotto l'altro.

Fonti e origini di test sono generalmente definite in questo modo.

In un'applicazione, di solito ho seguito:

module
    /Application
        ...
        /src
            /Form
                Form.php // Application\Form\Form
        /test
            /unit
                /Form
                    FormTest.php // ApplicationUnitTest\Form\FormTest
            /integration
                /Form
                    FormTest.php // ApplicationIntegrationTest\Form\FormTest
tests
    /e2e
        /web
            ...
            LoginSeleniumTest.php // E2EWebTest\LoginSeleniumTest

In particolare, solo i test di unità sono consentiti all'interno dei moduli. In alcuni rari casi, ho un test di integrazione, ma dovrebbero essere evitati e annotati con @coversNothing .

Aggiustamento di composer.json per l'autoload di ciascuno di questi spazi dei nomi:

{
    "autoload": {
        "psr-4": {
            "Application\": "module/Application/src"
        }
    },
    "autoload-dev": {
        "psr-4": {
            "ApplicationUnitTest\": "module/Application/test/unit",
            "ApplicationIntegrationTest\": "module/Application/test/integration",
            "E2EWebTest\": "tests/e2e/web"
        }
    }
}

Ciò che l'IDE dice qui è completamente irrilevante.

    
risposta data 05.05.2016 - 17:27
fonte

Leggi altre domande sui tag