私のプレーフレームワーク(2.5)アプリでは、サービスの単体テストを書く必要があります。Slick 3:トランザクションでリポジトリパターンを実装する方法は?
私はリポジトリのインターフェースを作成して、私のユニットテストでそれらを模擬したいこのため 、単独でサービス層をテストすることができへのデータアクセスロジックを分離する必要があり:
class UserService {
def signUpNewUser(username: String, memberName: String): Future[Unit] {
val userId = 1 // Set to 1 for demo
val user = User(userId, username)
val member = Member(memberName, userId)
// ---- I NEED TO EXECUTE THIS BLOCK WITHIN TRANSACTION ----
for {
userResult <- userRepository.save(user)
memberRepository.save(member)
} yield()
// ---- END OF TRANSACTION ----
}
}
上記の例では、userRepository.save(User)
memberRepository.save(member)
操作はトランザクション内で実行する必要があります。
テストを複雑にするので、私は自分のサービス層で直接slickを使いたくありません。
また、私は単体テストに組込みデータベースを使いたくないのですが、他の場所では単体テストではありません。完全な分離が必要です。
私は私のリポジトリのインタフェースが全くツルツルに依存することにしたいが、このようなものは必要ありません:どのように私は滑らかなでこれを達成することができます
trait UserRepository {
findById(id: Long): Future[Option[User]]
save(user: User): Future[Unit]
}
を?