问题标签 [scalamock]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
435 浏览

scala - 使用 Scalamock 模拟时无法使用匹配器

我们正在尝试使用 matcher 使用 ScalaMock 和 ScalaTest 运行测试should be。代码如下:

这是我们在 gradle 中的导入(它是一个混合项目 java+scala):

我们遇到的错误是:

非常感谢你的帮助。

0 投票
2 回答
1982 浏览

scala - Scala 测试:替换函数实现

使用 ScalaTest,我想替换测试用例中的函数实现。我的用例:

我想编写一个单元测试 testing Module.doSomething,但我不希望这个测试用例依赖于测试运行的实际年份。

在动态语言中,我经常使用可以替换函数实现以返回固定值的构造。

我希望我的测试用例将实现更改Module.currentYear为始终返回 2014,无论实际年份是什么。

我发现了几个模拟库(Mockito、ScalaMock、...),但它们都只能创建新的模拟对象。它们似乎都无法替代方法的实现。

有没有办法做到这一点?如果不是,我如何在不依赖于测试运行年份的情况下测试这样的代码?

0 投票
1 回答
1097 浏览

scala - 是否可以模拟在另一个函数中定义的函数?

我有一些访问数据库的函数,我需要对其进行模拟以进行测试。

为了便于使用,我想在另一个函数中定义这些函数,在那里我可以利用范围来减少我必须传递的参数数量。

我需要测试父函数,同时模拟嵌套函数。

有什么技巧可以模拟嵌套的函数吗?

作为第二个问题,当嵌套在任意深度时,有没有办法模拟函数?

附带说明:我的项目足够轻,我什至没有使用经典的模拟,只是像这篇博文所建议的那样可堆叠的特征;但是对于这个问题,任何形式的嘲讽都可以。

这是一些非常简单的示例代码:

0 投票
1 回答
6037 浏览

scala - ScalaMock 模拟特征给出“MockFunction1 不能转换为 StubFunction1”

以下代码:

给我一个运行时错误org.scalamock.MockFunction1 cannot be cast to org.scalamock.StubFunction1。我的项目依赖项是:

有任何想法吗?谢谢!

0 投票
1 回答
1375 浏览

scala - ScalaMock 验证返回 Unit 的泛型方法会导致方法重载编译错误

以下代码:

给出一个编译错误“使用替代方法验证重载方法值:(matcher: org.scalamock.FunctionAdapter1[Int,Booleam]) org.scalamock.CallHandler1[Int,Unit] with org.scalamock.Verify (v1: org.scalamock.MockParameter [Int]") org.scalamock.CallHandler1[Int,Unit] 和 org.scalamock.Verify 不能应用于 (xyContainer[Int])"

删除泛型没有帮助。从 stub/verify 切换到 mock/expects 会产生相同的编译错误。

我正在使用 scala 2.11.0

非常感谢任何帮助。

0 投票
1 回答
1327 浏览

scala - 使用 scalamock 将模拟对象用作 scala 中的隐式

我正在使用具有各种具体派生和隐式特征的特征定义将依赖项注入对象,并在单元测试时模拟系统的某些部分。问题是当一个类型的模拟版本被用作隐式声明时,它与消费对象中的 scala 不匹配。

这是我的设置的简化版本。有没有办法使用模拟 使Test1工作。Test2工作正常,但很难维护并且需要太多设置。

一个模型:

组件定义:

具体的组件实现之一:

在系统某处隐式使用组件 impl:

Unit Test1,试图模拟提供者以隔离存储库测试。这不起作用,存储库类与隐式不匹配,即使它基于 DataProviderComponent:

此版本确实有效,但难以维护并且需要更多代码:

有没有办法使用模拟类型作为注入的隐式 - 或者我应该使用另一种 scala-thonic 模式来解决这个问题?

0 投票
1 回答
1187 浏览

scala - mocking methods which use ClassTag in scala using scalamock

My first question, question, was answered but it uncovered another issue I am having. Here is the scenario.

Example code (expanded from previous question)

A Model:

Component Definition:

One of the concrete component implementations (updated implementation):

Implicit usage of component impl somewhere in system:

Unit Test1, trying to mock out provider in order to isolate repository test. This does not work, the following execption is thrown when test is run. I expect it is because of ClassTag usage because when I create another sample which does not use ClassTag, it works fine.

org.scalamock.MockFunction2 cannot be cast to org.scalamock.MockFunction1 java.lang.ClassCastException: org.scalamock.MockFunction2 cannot be cast to org.scalamock.MockFunction1

Unit Test2 does work but is hard to maintain and requires more code:

Unit Test3 does work but - used just to test ClassTag implemenation:

Am I using ClassTag wrong or is the mock not able to properly mock it?

0 投票
1 回答
7516 浏览

scala - 用 scala-mock 模拟一个特征的 val

我想嘲笑一个特征的价值。例如,在这段代码中,模拟 val baz

为了在我的测试中解决这个问题,我扩展了 Foo,并baz以下列方式实现:

但这很难看,我希望有一种更标准的方式来使用 scala mock。

我已经看到了这个问题的答案,但它需要改变特征中的valto def,我想保留baz一个 val

0 投票
1 回答
291 浏览

scala - 如何在 Play 中使用 scalamock 存根 WSRequestHolder.post()

我在使用 scalamock 来存根post()Play WS 库中 WSRequestHolder 中的方法时遇到问题。

这是我正在尝试的:

目的是在用调用Future.successful(response)a 时返回。post()Results.EmptyContent

我得到的编译器错误是:

值不是 (play.api.mvc.Results.EmptyContent, play.api.http.Writeable[play.api.mvc.Results.EmptyContent], play.api.http.ContentTypeOf[play.api.mvc .Results.EmptyContent]) => scala.concurrent.Future[play.api.libs.ws.WSResponse] (request.post[Results.EmptyContent](_ : Results.EmptyContent)(_ : Writeable[Results.EmptyContent], _: ContentTypeOf[Results.EmptyContent])).when(Results.EmptyContent(), , ) 返回 Future.successful(response)

知道我做错了什么吗?


更新

这里发生了一些我不太明白的事情。如果我定义以下特征:

它有一个post()与 签名相同的方法WSRequestHolder.post(),我可以成功地存根它。因此,WSRequestHolder.post()在这个问题中表现出一些特定的怪异之处。关于类型推断的一些细微差别可能吗?


更新 2

所以,我找到了一种解决方法。在我的测试中,我定义了一个扩展的新特征WSRequestHolder

在我的测试中,我根据这个特征创建了我的存根。如您所见,与 in 不同WSRequestHolder,我重写的 for 签名post()明确地说明了Future[WSResponse].

但是,问题仍然存在,这里到底发生了什么?这是 scalamock 在类型推断方面的某种限制吗?

0 投票
1 回答
441 浏览

scala - 如何验证 MailerAPI.send 的 ScalaMocks 存根已被调用?

如何验证ScalaMock存根的send(Email)方法是否已被调用?play.api.libs.mailer.MailerAPI

编译上述代码时,出现以下错误: