2

刚开始使用 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

4

1 回答 1

8

这是你如何做到的:

class Test {
  var testObject: ClassToBeTested = _

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

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

更多关于下划线初始化。


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

更准确地说,字段的初始值设定项“= _”为该字段分配零值。零值取决于字段的类型。数值类型为 0,布尔类型为 false,引用类型为 null。这就像在 Java 中定义了相同的变量而没有使用初始化程序一样。

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

 var celsius: Float

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

于 2012-08-07T19:21:28.613 回答