标签: scalamock

Scalamock 3.模拟重载方法没有参数

我找不到任何解释如何模拟在scalamock中不带参数的重载方法的文档,例如

public boolean isInfoEnabled(Marker marker);
public boolean isInfoEnabled();
Run Code Online (Sandbox Code Playgroud)

要模拟带标记的功能,可以简单地使用

(loggerMock.isInfoEnabled(_: Marker)).expects(*).returning(true)
Run Code Online (Sandbox Code Playgroud)

但是如何模拟不带参数的其他方法呢?任何帮助表示赞赏.

unit-testing scala scalatest scalamock

22
推荐指数
3
解决办法
4391
查看次数

Scala Mock部分剔除

我想将一个带有依赖项的scala类的方法存根.有没有办法使用ScalaMock实现这一目标?

这是我所拥有的简化示例:

class TeamService(val dep1: D1) {

  def method1(param: Int) = param * dep1.magicNumber()

  def method2(param: Int) = {
    method1(param) * 2
  }
}
Run Code Online (Sandbox Code Playgroud)

在这个例子中,我想嘲笑method1().我的测试看起来像:

val teamService = ??? // creates a stub
(teamService.method1 _).when(33).returns(22)
teamService.method2(33).should be(44)
Run Code Online (Sandbox Code Playgroud)

有没有办法实现这个目标?

unit-testing scala scalamock

9
推荐指数
1
解决办法
893
查看次数

ScalaMock:如何模拟/存根方法每次调用返回不同的值?

使用ScalaMock,我想模拟/存根一个类方法,因此它将为每次调用返回一个不同的值(调用顺序很重要).

我可以用mock和实现这一点expects,但这将迫使我验证这些调用.

我可以这样做stub吗?

另外,我怎么能说"第一次返回X,然后总是返回Y"(两者都带有mockstub)?

testing scala mocking scalamock

8
推荐指数
2
解决办法
9295
查看次数

最新的ExecutionContext

我想知道ExecutionContext我应该使用哪些(以及为什么)scalatest % 2.2.6来运行我的未来和模拟的未来.

class Foo {
   def foo: Future[String] = Future.sucessful("B")
}

class Bar(foo: Foo) {
   def bar: Future[String] = foo.foo()
}

class MyTest extends WordSpec {

  implicit val ec: ExecutionContext = ??? // ...global? Why global? Why not?

  val myMock = mock[Foo]
  val myBar = new Bar(myMock)

  "..." in {
    (myMock.foo _).expects(*).returning(Future.succesful("A"))
    whenReady(myBar.bar())(_ shouldBe "A")
  }
}
Run Code Online (Sandbox Code Playgroud)

scala future scalatest scalamock

8
推荐指数
1
解决办法
1598
查看次数

如何用scala mock模拟一个类

在scalamock的文档中,据说:

模拟类,特征和案例类

是支持的功能之一.

我有以下案例类:

case class Thing(private val item: Item)
Run Code Online (Sandbox Code Playgroud)

当我做:

val item = mock[Thing]
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

Error:(18, 24) not enough arguments for constructor Thing:
 (item: org.dspace.content.Item)org.iadb.poolpartyconnector.dspaceutils.Thing.
Unspecified value parameter item.
    val item = mock[Thing]
                   ^
Run Code Online (Sandbox Code Playgroud)

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

非常感谢,

Maatari

scalamock

6
推荐指数
1
解决办法
6109
查看次数

是否可以在 Scala 中模拟/覆盖依赖项/导入?

我有一些看起来像这样的代码:

package org.samidarko.actors

import org.samidarko.helpers.Lib

class Monitoring extends Actor {

  override def receive: Receive = {
    case Tick =>
       Lib.sendNotification()
    }
}
Run Code Online (Sandbox Code Playgroud)

有没有办法像使用nodejs的 proxyquire一样从ScalaTest模拟/存根Lib

我读到我可以使用依赖注入,但我宁愿不这样做

我唯一的选择是将我的 lib 作为类参数传递吗?

class Monitoring(lib: Lib) extends Actor {
Run Code Online (Sandbox Code Playgroud)

有什么建议可以使它更易于测试吗?谢谢

编辑:

Xavier Guihot的答案是一个有趣的问题方法,但我选择更改代码以进行测试。

我正在传递Libas 参数并使用mockito 进行模拟,它使代码更易于测试和维护,而不是隐藏作用域。

unit-testing scala mocking scalatest scalamock

6
推荐指数
1
解决办法
2081
查看次数

Scalamock:如何获得代理模拟的“期望”?

我正在将 Scalamock 与 ScalaTest 一起使用,并尝试模拟 Java 接口。我目前有:

private val _iface = mock [MyInterface]
Run Code Online (Sandbox Code Playgroud)

现在我想做

_iface expects `someMethod returning "foo" once
Run Code Online (Sandbox Code Playgroud)

但是编译器没有找到expects.

我进口org.scalatest._org.scalamock.scalatest._。我还缺少什么?

scala scalatest scalamock

5
推荐指数
1
解决办法
2064
查看次数

scalamock 模拟 java 接口方法 varargs

我需要使用 java 接口中的可变参数来模拟一个方法

public interface MyClient {
    MyResponse indexPrivileges(IndexPrivilege... parameters);
}
Run Code Online (Sandbox Code Playgroud)

我在嘲笑它

(mockMyClient.indexPrivileges _).expects(*).returns(response)
Run Code Online (Sandbox Code Playgroud)

但得到一个错误

[error] /projects/lib-scala-projects/src/test/scala/com/example/MyManagerTest.scala:67: value expects is not a member of com.example.parameters.IndexPrivilege* => com.example.MyResponse
[error]       (mockMyClient.indexPrivileges _).expects(*).returns(response)
[error]                                        ^
Run Code Online (Sandbox Code Playgroud)

另外,我尝试传递 IndexPrivilege 的 Seq 无济于事

(mockMyClient.indexPrivileges _).expects(privileges).returns(response)
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

unit-testing scalatest scalamock

5
推荐指数
1
解决办法
495
查看次数

模拟 SparkSession 用于单元测试

我的 Spark 应用程序中有一个方法可以从 MySQL 数据库加载数据。该方法看起来像这样。

trait DataManager {

val session: SparkSession

def loadFromDatabase(input: Input): DataFrame = {
            session.read.jdbc(input.jdbcUrl, s"(${input.selectQuery}) T0",
              input.columnName, 0L, input.maxId, input.parallelism, input.connectionProperties)
    }
}
Run Code Online (Sandbox Code Playgroud)

该方法除了执行jdbc方法并从数据库加载数据之外不执行任何其他操作。我该如何测试这个方法?标准方法是创建对象的模拟,session该对象是 的实例SparkSession。但由于SparkSession有一个私有构造函数,我无法使用 ScalaMock 来模拟它。

这里的主要问题是我的函数是一个纯粹的副作用函数(副作用是从关系数据库中提取数据),并且鉴于我在模拟时遇到问题,我如何对该函数进行单元测试SparkSession

那么有什么方法可以模拟SparkSession或者比模拟更好的方法来测试这个方法呢?

unit-testing scala mocking apache-spark scalamock

5
推荐指数
1
解决办法
1万
查看次数

Scala Mock 语法 (class _).expects 含义?

Scala 新手,已广泛搜索以澄清某些 ScalaMock 语法。根据本指南,我不断看到以下一般测试模式:

(myClass.myMethod _).expects()

这里到底发生了什么?类/方法/空格/下划线有什么功能?编译器如何处理这个问题?

unit-testing scala mocking scalamock

5
推荐指数
1
解决办法
1581
查看次数