Nelămuriri cu PHPUnit și Composer

Am început să lucrez la un proiect nou și vreau să fac totul ca la carte. Și am decis să sparg mare parte din proiect în mai multe sub-proiecte, astfel încât să le refolosesc și la alte proiecte.

Structura arată cam așa (am eliminat părțile ce le-am considerat irelevante):

├───proiectul-principal
│   ├───lib
│   │   └───Ntz
│   │       └───Modul-1
|   │       │   ├───includes
|   │       │   ├───Tests
|   │       │   ├───composer.json (2)
|   │       │   ├───phpunit.xml (2)
|   │       │   └───modul-1.php
│   │       └───Modul-2
│   ├───includes
│   │   └───fișierele proiectului principal
│   ├───Tests (pentru proiectul principal)
│   ├───composer.json (1)
│   ├───phpunit.xml (1)
│   └───init.php (din care se includ fișierele din includes)  

În composer.json (1) am așa:

{
  "require-dev": {
    "phpunit/phpunit": "~4.3"
  },
  "autoload": {
    "psr-0": {
      "Ntz\\": "lib"
    }
  }
}

În momentul de față totul este ok în proiectul principal: phpunit rulează, autoloader merge și el. (bootstrap-ul folosit în phpunit.xml este vendor/autoloader.php)

Pe de altă parte, nu știu cum ar trebui să procedez cu Modul-1, composer.json (2) respectiv phpunit.xml (2) astfel încât să profit de avantajele autoloaderului în momentul rulării testelor în Modul-1.

În momentul de față includ lib/ntz/modul-1/tests în phpunit.xml (1), dar mi se pare peste mână, pentru că depind de proiectul-principal pentru a rula testele (ce fac dacă la proiectul următor nu voi folosi phpunit sau composer?).

O altă soluție la care m-am gândit a fost să specific în phpunit.xml (2) un bootstrap de genul ../../../../vendor/autoload.php. Care merge, dar mi se pare că face testele dependente de proiectul principal (ceea ce nu mi se pare ok).

Deci, aveți ceva idei, sugestii?

fa testele pe fiecare modul in parte. n-ai ce cauta sa faci testele pe module din proiectul principal.

Bun, la asta mă gândeam și eu. Problema e că nu știu cum să folosesc autoloader în modul :smile:

probabil n-am inteles eu bine.
daca modulele se vor independente atunci n-ai nici un motiv sa ai nevoie de un autoloader. modulul nu trebuie sa stie de alte module sau de aplicatia principala.

Vreau autoloader pentru a nu încărca eu manual fiecare clasă în teste :smile:

Normal ca iti trebuie autoloader. In principiu, daca faci aplicatia ta, vei avea autoloader-ul tau (PSR-0) si la final vei apela autoloaderul din composer sa isi incarce librariile instalate cu composer pentru modulul / aplicatia ta.