问题标签 [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 回答
173 浏览

jmockit - 如何使用 scala mock 提供类的替代实现作为测试存根?

我在一个项目中发现我即将贡献一些外部库,为了测试目的,他们设置了一个模拟数据库管理器。然而,这个数据库管理器所做的是创建一个内存数据库并使用它。这是为了测试目的。

使用的框架是 Jmockit。

我试图找出如何在 scalamock 中重现它,但无法弄清楚。

这是如何在 jmockit 中设置的:

有什么可以支持 scalamock 的。我知道这与所有应用程序的开发方式有关。特别是他们如何使用或不使用依赖注入。但是尽管如此,我们有时还是必须处理遗留代码:)(大多数时候)

我唯一看到的是编写存根的所有功能。A - 但是,这并不好。B - 它也不是一个可以保留状态的完整类。所以一切都必须在创建存根的封闭类中进行管理。c - 再一次,遗留代码在类中做了很多有趣的事情,所以我必须重新创建所有代码等等...... d - 我希望重用他们的 MockDatabaseManager。

有什么建议吗?

0 投票
2 回答
4593 浏览

scalamock - 具有多个参数的scalamock和方法

我正在尝试模拟一个具有多个参数的函数的对象。

我只是试着为它设定期望。也就是说,某种形式:

(item.addMetadata( , , , , , )).expects("","","","","","","")

我只是不知道怎么写。该示例,通常处理一个参数函数: (item.addMetadata _).expects("")

如何处理多个参数?

编辑1

我更改为只是为了编译

现在问题显然是方法重载了?

我收到以下错误:

作为一个方面,我还应该补充一个事实,即我在模拟一个类而不是一个接口。这是不受我控制的类,有一个私有构造函数,只有一个静态创建方法。所以我也收到以下错误:

0 投票
1 回答
8867 浏览

scalamock - 如何用 scala mock 模拟一个类

在 scalamock 的文档中,据说:

模拟类、特征类和案例类

是支持的功能之一。

我有以下案例类:

当我做:

我收到以下错误:

我知道我可以为它实现一个接口,但无论如何,这将帮助我更好地理解如何模拟一个案例类/一个具有构造函数的类。

非常感谢,

马塔里

0 投票
2 回答
88 浏览

scala - 验证重载函数的无参数版本是否在 scalamock 中被调用

我正在使用 scalamock 并试图验证close()RabbitMQcom.rabbitmq.client.Channel类中的方法是否被调用。问题是该close()方法重载了两个选项:close()close(int, String). 我想验证是否调用了无参数版本。

我尝试了以下代码:

带有verify()on 的行无法编译,因为编译器对调用哪个重载函数感到困惑。

如何验证是否调用了重载函数的无参数版本?

0 投票
2 回答
881 浏览

scala - 使用 Scalamock 模拟播放 WSRequestHolder 获取方法

我正在尝试使用 ScalaTest 和 ScalaMock 测试以下代码行。

wsClienttype is THttpClient,它是play.api.libs.ws.WS.

鉴于:

被正确注入到我的测试类中,测试代码是这样的:

IntelliJ 突出显示mockRequestHolder.get一个错误:无法解析符号获取。尽管如此,我还是能够运行测试,但模拟显然不起作用,并且我得到:java.util.NoSuchElementException: JsError.get。

当我尝试模拟 的任何其他方法时,模拟正在工作WSRequestHolder,但不是使用 method get

这是 ScalaMock 错误还是我做错了什么?

0 投票
1 回答
245 浏览

scala - 在 ScalaMock 中,每当有人新建一个类的实例时,如何返回一个 mockClass?

在 PowerMockito 中,我们可以使用模式“whenNew(MyClass).thenReturn(mockMyClass)”,当有人想要新建一个 MyClass 的实例时,它会收到 mockMyClass 而不是真实的实例。

我们可以在 ScalaMock 或 EasyMock 中做类似的事情吗?我花了一整天的时间来解决这个问题。

这是我的场景,我有两个类 A 和 B。在类 A 中,它将新建一个类 B 的实例。

现在我想测试 A 类,当 A 类创建 B 类的新实例时,我想要返回 B 类的模拟对象(不是真正的 B 类)。

在 Java 中,我可以使用 PowerMock 和 JUnit 轻松处理此问题,但在 Scala 中无法做到。

0 投票
1 回答
778 浏览

scala - 使用 scalamock 在测试期间检测到缺少依赖项

我正在尝试使用 scalamock / scalatest 并且在测试过程中总是出错

我的 build.sbt

我的单元测试:

当我运行时sbt test,出现以下错误:

我该如何解决?

谢谢

0 投票
1 回答
258 浏览

scala - 如何用 ScalaMock 编写期望?

我知道这个问题似乎很明显,但是我已经尝试了文档上写的所有内容,并且我无法在任何类上模拟单个方法。

对于这个测试,我将 scalaMock 3 用于 Scala 2.10 和 ScalaTest 2

DateServiceTest.scala

日期服务.scala

这对我来说似乎很简单,但期望是向我抛出这个错误

我在这里做错了吗?还有另一种方法来设置方法的期望吗?

0 投票
1 回答
218 浏览

scala - ScalaMock 具有两个参数组的方法

我应该如何模拟这样的事情(来自 WS 库的 Play 的 WSRequest 的 post 方法):

我已经阅读了有关此的 ScalaMock 页面,但没有任何成功。

它也可以被钉住吗?我正在尝试这个没有运气:

0 投票
1 回答
2755 浏览

scala - 扩展特征的单元测试类-如何在特征中模拟和存根方法?

我正在使用 scalatest 对扩展特征的类进行单元测试(从某种意义上说,我的类将特征用作 mixin)。

该特征包含的方法是辅助方法(最终调用数据库中的一些查找),我想将其存根,以便我可以仅隔离我的类的功能。但是我还没有找到像 Mockito 或 ScalaMock 这样的框架来实现这一点。

问题:可以使用模拟框架来实现吗?如果可以,如何实现?如果没有,我很想知道是否有原因。

例如。

我需要根据 i 的值返回不同的存根答案。类似于 Mockito 的东西 when(myTrait.usefulMethod(1)).thenReturn(10)

我还需要验证是否在具有正确值的特征中调用了不同的方法。

本质上,我是在再次问这个问题,但我注意到这是在 2011 年提出的,事情可能已经发生了变化。可能会有新的框架和新的方法。这个 2001 年的问题也没有询问如何验证特征中的方法。

问题:以这种方式使用 traits-as-a-mixin 是否实际上阻止了使用模拟框架对来自 mixin 的模拟/存根方法进行单元测试的能力?即模拟和存根框架是否依赖于依赖注入的使用?

PS。直到现在我一直在使用 Mockito,但我并不反对使用 scalamock 或任何其他框架。我研究了 scalamock,因为它宣传它可以测试特征,但是从 scalamock 自己的测试看来,虽然它可以模拟特征,但如果该特征作为依赖项传递给类而不是类,则只能存根模拟行为扩展该特征。看这里