Sto riscrivendo una libreria client / proxy PHP che fornisce un'interfaccia a un webservice .Net basato su SOAP e, nel processo, voglio aggiungere alcuni test di unità e integrazione in modo che le modifiche future siano meno rischiose.
Il lavoro su cui sto lavorando è quello di eseguire il marshalling delle chiamate al servizio web e fare un po 'di riorganizzazione delle risposte per presentare un'interfaccia leggermente più orientata verso l'obiettivo del servizio sottostante.
Poiché questa libreria non è altro che un sottile strato in cima alle chiamate al servizio web, il mio presupposto di base è che scriverò davvero i test di integrazione più dei test unitari - ad esempio, non vedo alcun motivo per fingere via il servizio web - il lavoro eseguito dal codice su cui sto lavorando è molto leggero; sta quasi passando la risposta dal servizio al consumatore.
La maggior parte delle chiamate sono operazioni CRUD di base: CreateRole (), CreateUser (), DeleteUser (), FindUser (), & ct.
Inizierò da uno stato di database noto: il sistema che sto usando per questi test è isolato a scopo di test, quindi i risultati saranno più o meno prevedibili.
La mia domanda è questa: è naturale utilizzare le chiamate al servizio web per confermare i risultati delle operazioni all'interno dei test e ripristinare lo stato dell'applicazione nell'ambito di ciascun test? Ecco un esempio:
Un test potrebbe essere createUserReturnsValidUserId () e potrebbe essere come questo:
public function createUserReturnsValidUserId() {
// we're assuming a global connection to the service
$newUserId = $client->CreateUser("user1");
assertNotNull($newUserId);
assertNotNull($client->FindUser($newUserId);
$client->deleteUser($newUserId);
}
Quindi sto creando un utente, assicurandomi di recuperare un ID e che rappresenti un utente nel sistema, e poi ripulito dopo di me stesso (in modo che i test successivi non contengano il successo o il fallimento di questo test w / r / t il numero di utenti nel sistema, ad esempio). Tuttavia, questo sembra ancora piuttosto fragile: molte dipendenze e opportunità per i test falliscono e influenzano i risultati dei test successivi, che voglio assolutamente evitare.
Mi mancano alcune opzioni su come disaccoppiare questi test dal sistema in prova, o è davvero il meglio che posso fare?
Penso che questa sia una domanda di test di unità / integrazione abbastanza generale, ma se è importante utilizzo PHPUnit per il framework di test.