1

Gibt es eine gute Strategie, einen asynchronen insert zu einer mongodb Sammlung mit MongoDB Scala-Treiber zu testen 1.1:Wie async Mongo Abfrage zu testen?

driver.myCollection.insertOne(doc).subscribe(new Observer[Completed] { 

     override def onNext(result: Completed): Unit = /* do something */ 

     override def onComplete(): Unit = /* do something */ 

     override def onError(e: Throwable): Unit = /* do something */ 
    }) 

Alle Mock in einem Test, um sie auszuführen vorgeschlagen? Das Observable verspotten? Und im Falle eines Integrationstests?

+0

Sie können die verschiedenen Methoden abonnieren und dann das Observable in ein 'Future' und' Await.result' verwandeln. –

+0

Wie verwandelt man das Observable in eine Zukunft? – Randomize

Antwort

1

Eine mögliche Lösung ist insertOne aufzurufen und drehen den Observable[T] in eine Future[T] und verwenden Await.result synchron auf ihn zu blockieren. Diese Umwandlung wird in der ScalaObservable[T] impliziten Klasse definiert:

import org.mongodb.scala.ObservableImplicits._ 

val future = driver 
       .myCollection 
       .insertOne(docs) 
       .toFuture() 

Await.result(future, Duration(3000, MILLISECONDS)) 

Hinweis dies erfordert den Import von ObservableImplicits.

+0

Ich kann es nicht tun. Ich denke, du musst das 'subscribe' durch' toFuture' ersetzen. Die Zukunft wird als selbst beobachtbar funktionieren. – Randomize

+0

@Randomize Ja, du hast Recht. Ich habe die API verwechselt. –