2013-08-23 16 views
10

Sto provando a scrivere una specifica per qualcosa che usa il futuro, e non sono sicuro di come dovrei usare il tratto Futures. Devo passare whenReady a FutureConcept, ma non riesco a trovare come dovrei costruirne uno da Future. La documentazione si legge:passa il futuro a quandoReady fallisce

Per rendere whenReady più ampiamente applicabile, il tipo di futuro accetta è un futureconcept [T], dove T è il tipo di valore promesso dal futuro. Passare un futuro a whenReady richiede una conversione implicita dal tipo di futuro che si desidera passare (il tipo modellato) a FutureConcept [T].

Da che ho capito che devo scrivere una conversione implicita tra un Future ed un FutureConcept (che sembra sbagliato per me, come sembra che dovrebbe essere boilerplate, ma è l'unica cosa che posso fare di esso) . Io non riesco a capire come fare, però, la documentazione di futureconcept mi ​​dice comodamente

vedere la documentazione per Futures tratto per i dettagli sulla sintassi questo tratto prevede per il test con il futuro.

facendomi tornare al punto di partenza. L'esempio più semplice ho cucinato up è

import scala.concurrent._ 
import scala.concurrent.ExecutionContext.Implicits.global 

import org.scalatest.WordSpecLike 
import org.scalatest.concurrent._ 

class FutureSpec extends WordSpecLike with Futures { 
    "A future" must { 
    "be a valid argument for whenReady" in { 
     val fut = future { 42 } 
     whenReady(fut) { res => s should be 42 } 
    } 
    } 
} 

Che non può essere compilato con

  • tipo non corrispondente; trovato: scala.concurrent.Future [Int] richiesto: FutureSpec.this.FutureConcept [?]
  • ';' atteso ma trovato letterale intero.

cosa dovrei fare in modo diverso?

risposta

23

Ho trovato le conversioni implicite presenti in ScalaFutures, non in Futures. La dichiarazione della classe deve essere

class FutureSpec extends WordSpecLike with ScalaFutures 

Oltre a ciò, ci sono un paio di altri errori. FutureSpec dovrebbe anche avere Matchers mescolati in, e res => s è un errore di battitura sciocco, e dovrebbe essere res => res

+1

Questa risposta è assolutamente giusto, solo per aggiungere un po 'di chiarezza: Change 'con Futures' per 'con ScalaFutures' –

+0

grazie, è meglio questo? – Martijn

+0

Questo è perfetto. La tua risposta mi ha aiutato molto. Saluti! –

Problemi correlati