Accoppiamento strutturale del test

1

In Clean Architecture, Robert Martin parla della necessità di "disaccoppiare la struttura dei test dalla struttura dell'applicazione". Osserva che una suite di test che ha una classe di test per ogni classe di produzione / una serie di metodi di prova per ogni metodo di produzione è profondamente accoppiata e quindi fragile. Pertanto sostiene una API di test, che potrebbe disaccoppiare questa dipendenza strutturale.

Mi chiedevo come sarebbe questa API di test e la suite di test per quanto riguarda la strutturazione e la denominazione dei test? Inoltre, un tale disaccoppiamento sembra essere in disaccordo con le convenzioni di denominazione spesso incontrate nei test sotto forma di

[UnitOfWork__StateUnderTest__ExpectedBehavior]/[NameOfTheClassUnderTestTests]

come suggerito in questa risposta molto pubblicizzata su Stackoverflow , non è vero?

    
posta Ueli Hofstetter 06.02.2018 - 23:07
fonte

1 risposta

3

Naming

Affrontiamo prima la denominazione. Unit_StateOrEvent_Behavior è una convenzione di denominazione ragionevole secondo me. Ricorda che un'unità non è necessariamente una classe.

I nomi dei test devono esprimere i requisiti che testano, non i nomi delle classi che implementano i requisiti. Questo vale anche per il nome della classe di test.

Normalmente non si ha una mappatura diretta dei casi di test con i metodi (o di classi di test per le classi sotto test), perché generalmente non ci sarà una mappatura uno-a-uno dei requisiti a metodi / classi.

API di prova

I test unitari sono necessariamente accoppiati all'interfaccia pubblica dell'unità che stanno testando. Va bene, perché se il tuo sistema è collegato in modo approssimativo, solo i test relativi a quell'unità sono influenzati dai cambiamenti.

Dal contesto della citazione che hai fornito, deduco che la preoccupazione di Martin è l'accoppiamento di test di integrazione / accettazione con la struttura interna del sistema, o con dettagli come la GUI (come discusso nella pagina precedente) . Se ciò accade, una modifica a una classe potrebbe non richiedere più solo una modifica a pochi test di unità, ma a un numero potenzialmente elevato di test di livello superiore.

Per evitare questo, questi test dovrebbero accedere al sistema attraverso un'API stabile. Gli interlocutori sono un buon candidato. Ma a volte gli interattori potrebbero non essere sufficienti per le vostre esigenze di test: potrebbero non essere abbastanza stabili, richiedere l'esecuzione di una logica difficile o costosa o vincolarvi per altri motivi (ad es. Sicurezza).

Per questi casi, Martin propone di fornire un'API estesa utilizzata solo dai test. Questa API protegge quindi i test dagli interni, allo stesso modo in cui gli utenti interagiscono con l'interfaccia utente.

    
risposta data 07.02.2018 - 00:35
fonte

Leggi altre domande sui tag