2016-05-03 5 views
0

Ich habe Funke Job wie:Testfunken Jobs mit Mocks

stream. 
..do some stuff.. 
map(HbaseEventProcesser.process) 

jetzt HbaseEventProcesser ein scala Objekt ist (Singleton). Es gibt also keine Probleme mit der Serialisierung.

Das Problem besteht darin, dass der Funke-Job getestet wird (holdenkarau spark-test lib wird verwendet). Ich möchte HbaseEventProcessor mit einer anderen Implementierung vortäuschen. Ich habe zwei Ansätze

  • Durchlauf-Implementierung Job (als Konstruktorargument und als Methoden in Karte) aufgerufen. Dieses Problem bei der Serialisierung Problem
  • Verwenden Sie PowerMock. Leider ist der Deepcopy-Vorgang fehlgeschlagen, wenn SharedSparkContext verwendet wird.

Gibt es noch andere Problemumgehungen?

Antwort

0

Sie haben mindestens die folgenden Optionen:

1) HbaseEventProcesser reguläre Klasse machen, die einige reine Merkmal EventProcessor erstreckt und als verspotten sie mit Rahmen Ihrer Wahl

2) Refactoring Sie Code wie folgt smth

def mapStream[T, R](stream: DStream[T], process: T => R) = { 
stream. 
..do some stuff.. 
map(process) 
} 

//in main code: 
mapStream(stream, HbaseEventProcesser.process) 

//in test code: 
mapStream(stream, customFunc) 
+0

dies ist das erste, was ich tat. Es verursacht jedoch Serialisierungsproblem. I meen: Klasse HBaseEventProcessor erweitern EventProcessor und SparkJob (EventProcessor: EventProcessor) {.... rdd.map (eventProcessor)} – Natalia

+0

haben Sie versucht, es serialisierbar zu machen: 'Klasse HBaseEventProcessor erweitert java.io.Serializable mit EventProcessor '? –

+0

Sicher, als Ergebnis bekomme ich: \t verursacht durch: java.io.NotSerializableException .....- Objekt (Klasse com ...... ClientDerivedEventsStreamingJob $$ anonfun $ preStream $ 2 $$ anonfun $ 9, ) – Natalia