2013-03-11 9 views
5

Böyle Uygulamayı test etmek scalatest kullanmaya çalışıyorum:Uygulama özelliğini genişleten alan içindeki nesne boş olarak ayarlandı. Neden böyle?

object Main extends App { 
    val name = "Greg" 
} 

class JunkTests extends FunSpec with MustMatchers { 
    describe("Junk Tests") { 
     it("Junk-1 -- Must do stuff") { 
      println("Name: "+Main.name) 
      // some test here 
     } 
    } 
} 

İsmim çıkışı her zaman sıfırdır. Bir test sırasında ana objemin tesislerini nasıl kullanacağım? Gerçek kullanımda bir Http sunucusuna sahip bir Uygulama sahibiyim ve bu iletiyi göndermek istiyorum, ancak şu anda sunucunun hiçbir zaman başlatılmaması için başlatılmıyor. Bu basit örnek, Main'ın asla başlatılmadığını gösterir.

cevap

10

özellik ana yöntem yürütülmeden önce nesnenin alanların başlatıldıktan anlamına gelir DelayedInit özelliğe kullanılarak yapılır unutulmamalıdır.

Scaladoc for App trait

Yani birini yapabilirsiniz:

  • nihai olarak val tanımlayın: def name = "Greg"
  • : final val name = "Greg"
  • tetik ana yöntem adı alanını
  • erişmeden önce yöntemi olarak adını tanımlayın ismi lazy val olarak tanımlayın: lazy val name = "Greg" (bu durumda, önceki durumda olduğu gibi, başlatma sırasının ne zaman yapıldığı hiç önemli değildir)
+1

val temposu benim için işe yaradı; Nihai olarak davranışı değiştirmedi. – hughw