La composizione può essere utilizzata in test di unità / integrazione sull'ereditarietà

2

Nei progetti più grandi, spesso può esserci un gruppo di test che testano la funzionalità delle classi correlate. Questi test spesso condividono molte funzionalità di installazione e preparazione.

Quello che succede è che per questi casi di test viene definita una classe base in modo che possano condividere campi istanza e funzionalità comuni. Questo porta a problemi quando un test utilizza molte funzionalità presenti in più classi.

Sarebbe possibile utilizzare qualche forma di composizione per questo tipo di riutilizzo del codice?

Lasciatemi fare un esempio concreto. Ho alcune classi che possono "scrivere" un elenco di transazioni, definito dall'interfaccia "TransactionWriter". Le implementazioni concrete sono "FileTransactionWriter" e "ConsoleTransactionWriter".

Entrambe le classi di test per queste implementazioni dovrebbero impostare transazioni con dati arbitrari. Questo codice verrebbe duplicato in entrambe le classi se non estratto in una classe di test di base. Ma lo stesso obiettivo può essere raggiunto con la composizione?

    
posta Thijs Riezebeek 20.07.2016 - 10:30
fonte

1 risposta

2

Il compromesso tra ereditarietà e composizione è esattamente lo stesso per il codice di prova come per il codice aziendale.

Composizione richiede la delega delle chiamate per tutte le funzionalità che desideri proiettare sulla tua interfaccia pubblica. Ciò significa che la composizione diventa più ingombrante più grande è la funzionalità che si desidera riutilizzare.

L'ereditarietà raggiunge il riutilizzo senza ulteriori sforzi, ma a sua volta porta a interfacce pubbliche gonfiate perché riutilizza sempre tutto . Inoltre, molte lingue ti consentono di ereditare solo una volta.

Questo significa che per riutilizzare uno specifico di funzionalità come scrivere cose, l'ereditarietà potrebbe essere una buona soluzione, ma dipende troppo dalle specifiche del nostro codice di base per dare una risposta generale.

    
risposta data 20.07.2016 - 10:59
fonte

Leggi altre domande sui tag