是否可以声明一个对象并在Scala中稍后对其进行初始化

时间:2012-08-07 19:09:27

标签: scala

刚开始使用Scala进行单元测试,并提出了这个基本问题。

class Test {
  ClassToBeTested testObject;

  @Before
  void initializeConstructor() {
    testObject = new ClassToBeTested(//Blah parameters);
  }

  @Test
  //Blah
}

Java中的上述示例显示我可以声明类型为ClassToBeTested的对象并稍后对其进行初始化。这可以在Scala中完成吗?我试过了

class Test {
  var testObject = new ClassToBeTested()

  @Before def initializeConstructor() {
    //I do not know how to proceed here!!!!!!
  }

  @Test def testOne() {
    //Some test
  }
}

我不想在testOne()内做所有事情,因为我想在不同的测试中使用该对象。构造函数的参数是模拟的,在JUnit我知道如果我在全局而不是在@Before内初始化一个对象,则不会初始化模拟。

1 个答案:

答案 0 :(得分:8)

以下是如何制作它:

class Test {
  var testObject: ClassToBeTested = _

  @Before 
  def initializeConstructor() {
    testObject = new ClassToBeTested()
  }

  @Test 
  def testOne() {
    //Some test
  }
}
下划线初始化

More


您还可以在Scala编程的第18.2 Reassignable variables and properties节中了解更多相关信息。这是引用,对您有所帮助:

  

更确切地说,字段的初始值设定项“= _”为该字段指定零值。零值取决于字段的类型。数字类型为0,布尔值为false,引用类型为null。这与在没有初始化程序的Java中定义相同变量的情况相同。

     

请注意,您不能简单地在Scala中省略“= _”初始值设定项。如果你写了:

 var celsius: Float
     

这将声明一个抽象变量,而不是未初始化的变量