5

Play フレームワークと scala は初めてで、コンパニオン オブジェクト内に依存関係を挿入しようとしています。

次のような単純なケースクラスがあります。

case class Bar(foo: Int) {}

次のようなコンパニオン オブジェクトを使用します。

object Bar {
  val myDependency =
  if (isTest) {
    // Mock
  }
  else
  {
    // Actual implementation
  }

  val form = Form(mapping(
    "foo" -> number(0, 100).verifying(foo => myDependency.validate(foo)), 
  )(Bar.apply)(Bar.unapply))
}

これは問題なく機能しますが、実際にはクリーンな方法ではありません。ビルド時に依存関係を注入できるようにして、テスト時にさまざまなモック オブジェクトを注入し、開発と運用でさまざまな実際の実装を注入できるようにしたいと考えています。

これを達成するための最良の方法は何ですか?

どんな助けでも本当に感謝しています。ありがとう!

4

1 に答える 1

0

Cakeの行に沿って、例を次のように変更してみることができます

trait Validator {
    def validate(foo: Int): Boolean
}

trait TestValidation {
    val validator = new Validator {
        def validate(foo: Int): Boolean = ...   
    }
}

trait ImplValidation {
    val validator = new Validator {
        def validate(foo: Int): Boolean = ...   
    }
}


trait BarBehavior {
    def validator: Validator

    val form = Form(mapping(...))(Bar.apply)(Bar.unapply)
}

//use this in your tests
object TestBar extends BarBehavior with TestValidation

//use this in production
object ImplBar extends BarBehavior with ImplValidation

この例が Play フレームワークにも適合するかどうかをさらに試してテストする必要があります。

于 2013-03-15T11:13:28.667 に答える