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
  }
}

アンダースコアの初期化の詳細。


これについての詳細は、セクション18.2「Scalaでのプログラミングの再割り当て可能な変数とプロパティ」の本でも読むことができます。ここに引用があります、それはあなたに役立つことができます:

より正確には、フィールドの初期化子 "= _"は、そのフィールドにゼロ値を割り当てます。ゼロ値は、フィールドのタイプによって異なります。数値型の場合は0、ブール型の場合はfalse、参照型の場合はnullです。これは、同じ変数が初期化子なしでJavaで定義された場合と同じです。

Scalaでは「=_」初期化子を単純に省略できないことに注意してください。あなたが書いた場合:

 var celsius: Float

これは、初期化されていない変数ではなく、抽象変数を宣言します

于 2012-08-07T19:21:28.613 に答える