2009-02-26 14 views
7

Sto appena iniziato con Scala, e mi chiedo quale caratteristica del linguaggio permette di fare questo:Come funziona il framework BDD di "specs" per Scala?

"PersistentQueue" should { 
    "add and remove one item" in { 
    withTempFolder { 
     val q = new PersistentQueue(folderName, "work", Config.fromMap(Map.empty)) 
     q.setup 

     q.length mustEqual 0 
     q.totalItems mustEqual 0 
     q.bytes mustEqual 0 
     q.journalSize mustEqual 0 

     q.add("hello kitty".getBytes) 

     q.length mustEqual 1 
     q.totalItems mustEqual 1 
     q.bytes mustEqual 11 
     q.journalSize mustEqual 32 

     new String(q.remove.get.data) mustEqual "hello kitty" 

     q.length mustEqual 0 
     q.totalItems mustEqual 1 
     q.bytes mustEqual 0 
     q.journalSize mustEqual 33 

     q.close 
     dumpJournal("work") mustEqual "add(11:0:hello kitty), remove" 
    } 
    } 
} 

Questo è dal unit tests for Kestrel.

Cosa sta succedendo qui? "PersistentQueue" should significa che la classe di stringa Scala è stata estesa con un metodo "should", o qualcos'altro sta accadendo qui? Ho dato una rapida occhiata alla documentazione di Scala, ma non sono riuscito a vedere quali caratteristiche linguistiche vengono utilizzate per questo esempio di codice.

risposta

6

Sembra che i metodi impliciti vengano aggiunti alla classe String per me. This post ha una dimostrazione.