2017-06-20 11 views
2

私はユーザデータベースを必要とする暗黙のクラスを持っています。私は暗黙的なクラスで自己型を使用したいので、テストスコープでのデータベースの実装を模擬バージョンに切り替えることができます。この場合、データベースプロバイダをどのように混在させるのですか?たとえば、RuchUserのユーザーは、デフォルトのミックスインを提供することでUserDatabaseProviderを混在させることを心配する必要はありません。だから、ユーザーはUser("name").userContextを実行して、テスト用のスコープで同じことをして、どこでmockedデータベースプロバイダを使うためのデフォルトのミックスインを提供するのですか?自己型で暗黙的に使用するスカラー

case class User(name: String) 

object User { 
    implicit class RichUser(self: User) { this: UserDatabaseProvider => 
    def userContext: String = this.getUserContext(self.name) 
    } 
} 

// Usage of Rich user should be below as I want to provide already mixed-in implicit 
import User._ 
val context = User("name").uerContext 

答えて

1

私はかなり複雑すぎると思います。

case class User(name: String) { 
    def context()(implicit db: UserDatabaseProvider): UserContext = { 
    db.getUserContext(name) 
    } 
} 

私はさらに、ケーキパターンが暗黙の使用よりも適用可能であることを示唆しています。

class UserService extends UserDatabaseProvider { 
    def context(user: User): UserContext = getUserContext(user.name) 
} 
class TestUserService extends UserService with TestDatabase 

Scalaの「右端の勝利」のダイヤモンド解像度であなたの仕事ができます。

関連する問題