关于 ScalaMock 模拟(同伴)对象和构造函数的能力,存在一些相互矛盾的说法。ScalaMock页面逐步说明
它还可以模拟:
另一方面,路线图告诉我:
2016 年第一季度 - ScalaMock 4 一旦 scala.meta 可用,我们计划开始开发 ScalaMock 4。如果 scala.meta 兑现其承诺,ScalaMock 4 应该能够模拟任何特征,无论其类型有多复杂。
此外,我们预计它还将支持:
那么,什么是正确的呢?当前版本(ScalaMock 3.2)是否能够模拟对象和构造函数?
我正在尝试ScalaGettableData使用 scalamock 模拟 Cassandra 对象。我需要模拟以下方法:
def getMap[K : TypeConverter, V : TypeConverter](name: String) = get[Map[K, V]](name)
Run Code Online (Sandbox Code Playgroud)
TypeConverter是 aTrait并且具有隐式实现,例如:
implicit object StringConverter extends TypeConverter[String]
在我的代码中我正在调用
scalaGettableData.getMap[String, String]("myMap")
我猜它隐式转换为
scalaGettableData.getMap[StringConverter, StringConverter]("myMap")
我的测试代码如下:
val cassandraRow1 = mock[ScalaGettableData]
(cassandraRow1.getMap[String, String] _).expects("localizations_config").returning(Map("key1" -> "value1"))`
Run Code Online (Sandbox Code Playgroud)
但我收到编译错误:
Error:(28, 26) _ must follow method; cannot follow (name: String)(implicit evidence$3: com.datastax.spark.connector.types.TypeConverter[String], implicit evidence$4: com.datastax.spark.connector.types.TypeConverter[String])Map[String,String] <and> (index: Int)(implicit evidence$3: com.datastax.spark.connector.types.TypeConverter[String], implicit evidence$4: com.datastax.spark.connector.types.TypeConverter[String])Map[String,String]
Run Code Online (Sandbox Code Playgroud)
我应该如何嘲笑这个方法?
我看过很多关于在使用scalamock测试时如何模拟案例类中的方法的文章。
然而,有时我只需要模拟一个字段。例如,当我测试一个非常狭窄的工作流程时。
我认为这stub[Type].copy(f = "1")会起作用,但它只返回null.
您也不能像方法一样模拟该字段:
val x = mock[Type]
( x.f _ ).when().then("1")
Run Code Online (Sandbox Code Playgroud)
这也不会编译。
在这种情况下有什么解决方法?在这种情况下,最佳做法是什么?我真的应该定义不需要测试的整个案例类字段吗?
尝试模拟声明为的方法时
def foo: Int
Run Code Online (Sandbox Code Playgroud)
和
val mock = mock[MyClass]
(mock.foo _).expects().returning(10)
Run Code Online (Sandbox Code Playgroud)
我收到一个错误
Error: Methods without a parameter list and by-name params can no longer be converted to functions as `m _`, write a function literal `() => m` instead
有一个提示可以改为编写函数文字,但我不太明白如何将我的代码转换为等效的函数文字。
我有一个案例课
case class InputCriteria(a: Int) {
val b: Int = config.getInt("some path")
}
Run Code Online (Sandbox Code Playgroud)
如何模拟这个案例类并覆盖 b 的值?
我想测试我的代码,它具有一些尾部递归函数。我无法嘲笑尾部递归函数,因为它们需要声明Finalor Private。大多数模拟框架不支持模拟此类方法,而那些支持的方法则无法按预期工作。
这有可能吗?有人可以给我他们的想法来模拟尾部递归函数吗?
我尝试使用MockitoFramework版本进行模拟3.0.0。我的测试套件具有该Mockito-Sugar特性。
尽管Mockito 文档建议可以模拟最终方法,但对我而言却是失败的。
我尝试使用scala-mock。我遇到了其他问题,但没有解决。