Per quanto riguarda il test delle unità, mi è stato insegnato che il codice di produzione non dovrebbe contenere il codice relativo ai test.Le interfacce di un singolo implementatore per l'unità testano un antipattern?
Bene, mi sento come se infranassi questa regola ogni volta che provo al test unitario.
Ho una classe interna al mio assembly, Xyzzy
. Voglio dipendere da una dipendenza in un'altra classe e poi stubla così posso testare l'altra classe in isolamento, quindi creo un'interfaccia, IXyzzy
. Oops, ora ho il codice in produzione che è davvero lì solo per il test. Ancora peggio, sono andato contro l'interfaccia (descrive cosa può fare un implementatore do, non quello che è è). L'interfaccia pubblica di Xyzzy e IXyzzy sono esattamente uguali e nessun altro (tranne gli stub) implementa IXyzzy.
Sembra una cosa negativa per me.
ho potuto creare una classe base astratta o fare tutti i metodi pubblici che voglio testare il Xyzzy Overridable
/virtual
, ma che si sente male anche dal Xyzzy non è progettato per l'eredità e da una prospettiva YAGNI, non lo farà mai essere ereditato da
La creazione di interfacce per singolo implementatore è esclusivamente ai fini del test di un anti-pattern? Ci sono alternative migliori?
Molto vero, molte delle mie interfacce, ad es. 'IRequestor', descrivi cosa fa;) –