2014-04-11 7 views
5

Stavo cercando di capire il modello di progettazione utilizzato per la classe TestRunner (package junit.textui) di JUnit. La classe TestRunner sta estendendo un ascoltatore e ha un riferimento di listener.quale motivo di progettazione viene utilizzato per la classe TestRunner in junit

Se è il modello di progettazione Observer, perché è il listener estendibile ? dovrebbe avere solo riferimento dell'ascoltatore.

+0

Ciao e benvenuto in SO. Questo sito aiuta le persone a risolvere i loro specifici problemi di programmazione. Dai un'occhiata al Centro assistenza http://stackoverflow.com/help per vedere quali domande e come dovresti chiedere qui. –

+1

@Ean Sembra un "problema pratico e risolvibile" che è "unico per lo sviluppo del software". Esiste anche un po 'di sottigliezza: TestRunner implementa TestListener ma sembra non utilizzarlo. –

risposta

3

junit.textui.TestRunner conforme al Observer pattern, ma è la dell'osservatore, non il soggetto . Almeno, è essere l'osservatore, non lo è più.

JUnit espone l'interfaccia TestListener: La classe TestResult gestisce un TestCase, chiamando i propri metodi e startTestendTest. TestResult contiene anche un elenco di istanze di TestListener e ne notifica tutte le volte che viene avviato o terminato un test. Questo è il pattern Observer per eccellenza: TestResult è l'oggetto, che notifica la sua raccolta di istanze TestListener, una delle quali potrebbe essere TestRunner che si aggiunge all'elenco.

Detto, TestRunner doesn't currently add itself as a listener to TestResult, ed ha implementazioni vuote delle sue richieste testStarted, testEnded e testFailed metodi. Invece, aggiunge un ResultPrinter alla lista di ascoltatori; Presumo che questo sia stato preso in considerazione da TestRunner ad un certo punto.

Quindi, TestRunner è impostato per essere un Observer, ma non funziona più come uno. Tutto sommato, questo dimostra in realtà una forza di modelli di progettazione: consente di ridefinire il codice e separare il comportamento codificando con quelle specifiche interfacce.