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

noM*_*MAD 2 scala

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

class Test {
  ClassToBeTested testObject;

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

  @Test
  //Blah
}
Run Code Online (Sandbox Code Playgroud)

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
  }
}
Run Code Online (Sandbox Code Playgroud)

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

ten*_*shi 8

以下是如何制作它:

class Test {
  var testObject: ClassToBeTested = _

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

  @Test 
  def testOne() {
    //Some test
  }
}
Run Code Online (Sandbox Code Playgroud)

更多关于下划线init.


您还可以在第18.2节" Scala编程中的可重新分配的变量和属性 "一书中阅读更多相关信息.这是引用,对您有所帮助:

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

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

 var celsius: Float
Run Code Online (Sandbox Code Playgroud)

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