【发布时间】:2017-01-12 16:22:48
【问题描述】:
在我的 play framework (2.5) 应用中,我需要为服务编写单元测试。
我需要隔离数据访问逻辑以便能够单独测试服务层, 为此,我想创建存储库接口并在我的单元测试中模拟它们:
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,因为它会使我的测试复杂化。
另外,我不想在单元测试中使用嵌入式数据库,在其他地方它不是单元测试,我需要完全隔离。
我不希望我的存储库接口完全依赖于 slick,但需要这样的东西:
trait UserRepository {
findById(id: Long): Future[Option[User]]
save(user: User): Future[Unit]
}
我怎样才能用 slick 做到这一点?
【问题讨论】:
标签: scala unit-testing playframework slick