gpt4 book ai didi

scala - 游戏中的 mock !和斯卡拉

转载 作者:行者123 更新时间:2023-12-01 21:55:25 24 4
gpt4 key购买 nike

我在 Play 应用程序中进行模拟时遇到问题。我有一个应用程序如下:

object Application extends Controller {
def login = Action {implicit request =>
val email = ... //Some email from the request
if(EmailChecker.checkEmail(email)) {
Ok("Email is checked and is fine")
} else {
Ok("Email is wrong")
}
}
}

我想做的是测试一个请求,但模拟掉 EmailChecker,因为它在某些数据库中进行一些查找,而这不是我在测试中想要做的事情。

我看过一些关于如何在 Scala 中进行模拟的教程,但我找不到任何涵盖我所遇到的情况的内容。

任何显示如何做我想做的事情的帮助/指针/教程都会很棒。

我对 Play! 都很陌生!和斯卡拉...

最佳答案

一种可能的解决方案:

class Application(emailChecker: EmailChecker) extends Controller {
def login = Action {implicit request =>
val email = ... //Some email from the request
if(emailChecker.checkEmail(email)) {
Ok("Email is checked and is fine")
} else {
Ok("Email is wrong")
}
}
}

object Application extends Application(EmailChecker)

测试将是:

import org.specs2.Specification
import org.specs2.mock.Mockito

class ApplicationUnitSpec extends Specification with Mockito { def is =
"Test Application" ! {
val emailChecker = mock[EmailChecker]
val response = new Application(emailChecker).login(FakeRequest)
there was one(emailChecker).checkEmail("blah@example.com")
}
}

我还喜欢定义一个包含 Real 和 Test 隐式的对象,它们分别提供 EmailChecker 等服务的真实版本和 stub 版本,并根据它是测试代码还是产品代码导入它们。在这种情况下,您需要隐式设置 emailChecker 参数。一种原始的依赖注入(inject)类型。

关于scala - 游戏中的 mock !和斯卡拉,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12584700/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com