Gli adattatori o i wrapper dovrebbero essere testati unitamente?

7

Supponiamo di avere una classe che implementa una logica:

public MyLogicImpl implements MyLogic {
    public void myLogicMethod() {
        //my logic here
    }
}

e da qualche altra parte una classe di test:

public MyLogicImplTest {
    @Test
    public void testMyLogicMethod() {
        /test my logic
    }
}

Ho anche:

@WebService
public MyWebServices class {
    @Inject
    private MyLogic myLogic;

    @WebMethod
    public void myLogicWebMethod() {
        myLogic.myLogicMethod();
    }
}

Dovrebbe esserci un'unità di test per myLogicWebMethod o il test per esso verrà gestito nei test di integrazione.

    
posta m3th0dman 19.11.2012 - 08:26
fonte

3 risposte

5

Considera le diverse pressioni coinvolte. La copertura del 100% del codice nei test delle unità è un obiettivo valido, poiché ti protegge dalle regressioni che avvengono attraverso modifiche casuali, attraverso modifiche ai requisiti, cambiamenti ambientali, ecc. D'altra parte, la scrittura di test di regressione consuma del tempo prezioso. Se si dispone di accessor o wrapper generati completamente regolari o generati automaticamente, è probabile che questi siano quelli con meno probabilità di introdurre errori impercettibili attraverso modifiche successive, pertanto i test di scrittura con questi dovrebbero essere la priorità più bassa. In pratica, spesso non hai abbastanza tempo per raggiungere una copertura del 100% del codice (per non parlare del 100% di copertura dello stato), ma l'atto stesso di pensare al tuo sistema e decidere quali parti testare preferibilmente è già molto, molto meglio di no avendo test di regressione.

Quindi la mia risposta sarebbe: dovresti, ma se ciò non è fattibile nel tuo ambiente di lavoro, non è così male come mancano i test unitari contro parti più complicate della base di codice.

    
risposta data 19.11.2012 - 08:39
fonte
1
 > Should adapters or wrappers be unit tested

la responsabilità principale del wrapper deve essere verificata dall'unità tramite il wrapper

no non la funzionalità completa dovrebbe essere testata dall'unità tramite il wrapper

Ecco un esempio che illustra cosa intendo:

se hai un

  • class MyComplicatedBusinessCalculation e
  • class MyPermissionManager e
  • webservice MyComplicatedBusinessCalculationWebservice che combina calcolo e autorizzazioni

dovresti avere le unittests complete per il calcolo e le autorizzazioni complete per le autorizzazioni.

Per il webservice si deve solo verificare che per ogni metodo di webservice venga chiamato il calcolo corrispondente e che venga applicato quel permesso.

Non c'è bisogno di testare tramite webservice le combinazioni di permessi sono corretti visto che le hai già testate con le autorizzazioni-unittests.

Non è necessario testare tramite webservice i diversi edgecases per i calcoli di business, dal momento che li hai già testati con il calcolo-unittests.

Non consiglierei di testare le classi sottostanti attraverso il webservice.

Esempio:

Se MyPermissionManager cambia solo MyPermissionManager, è necessario aggiornare le Unittests ma non i test del servizio web

    
risposta data 20.11.2012 - 14:23
fonte
0

Il tuo metodo di servizio web produce quasi certamente un risultato diverso rispetto al tuo metodo semplice. Potrebbe essere una enorme busta SOAP avvolta attorno al tuo semplice "Hello, World!" risposta. Potrebbe essere una risposta HTTP RESTful. Ma è quasi certamente diverso. Quindi sì, provalo in modo diverso.

    
risposta data 20.11.2012 - 02:12
fonte

Leggi altre domande sui tag