Domanda

Il mio team di sviluppo ha iniziato ad utilizzare Mockito e hanno classi che sono stati definiti come 'finale'. Ho letto in Effective Java da Joshua Bloch e nel SO filo quando usare finale che tutte le classi devono utilizzare il modificatore finale. Ci sono stati un certo disaccordo nel thread, ma sono d'accordo con l'idea di costringere composizione di classe a meno che l'ereditarietà ha un senso.

Cosa devo fare quando voglio testare classi utilizzando un framework di test come Mockito che richiede classi di non avere il modificatore 'finale'? Sto sperando che qualcun altro ha riscontrato problemi simili durante il loro sviluppo. Quali risoluzioni ha il team di sviluppo arrivi in?

Ci sono due risposte ovvie come l'utilizzo di JMock o rimuovere il modificatore 'finale' sulle classi che vogliamo testare, ma vogliamo attaccare con un framework di test esterna (oltre JUnit) e può essere difficile convincere altri sviluppatori per rimuovere il modificatore 'finale'.

Grazie.

È stato utile?

Soluzione

Che cosa avete bisogno di più:

  1. La capacità di fare in modo che qualcuno non eredita dalla classe, OR
  2. La capacità di fare in modo che il codice è testabile usare il quadro di scherno di scelta?

In generale, credo che non c'è bisogno di far rispettare (1). Per me, testabilità (2), è molto più importante. Che si adatta alla situazione migliore?

Altri suggerimenti

Se si desidera che le classi siano finale si può avere li implementano interfacce. Le interfacce sono mockable.

Come già accennato in altra risposta è possibile effettuare le classi finali di implementare Interfaccia (s) e nei test deridono l'interfaccia (s).

Questo è uno dei il vantaggio di utilizzare oggetti Mock; in scenari come questo ti fanno pensare a come il codice può essere meglio organizzata. Se la base di codice è molto riferimento a classi finali (quindi vincolanti per l'attuazione concreta) viola il principio OO di "programmazione di un'interfaccia" e la necessità di una migliore controllabilità aiuterebbe a pensare di refactoring per eliminare la dipendenza su implementazioni concrete.

Questo documento sull'uso del Mock Objects Endo-test: Unit Testing con gli oggetti Mock ha una sezione (4.4) dal titolo scoperta Interfaccia che spiega come finto oggetti aiutano a scoprire le interfacce.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top