嘲笑玩!和斯卡拉
发布时间:2020-12-16 18:15:40 所属栏目:安全 来源:网络整理
导读:我在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 f
我在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中进行模拟的教程,但我找不到任何涵盖我的案例的内容. 任何帮助/指针/教程显示如何做我想做的事情都会很棒. 我对这两个游戏都很陌生!和斯卡拉…… 解决方法
一种可能的方案:
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 implicits的对象,它们分别提供像EmailChecker这样的服务的真实版本和存根版本,并根据它是测试代码还是prod代码来导入它们.在这种情况下,您需要隐藏emailChecker参数.原始类型的依赖注入. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |