如何在scala中使用Mockito创建模拟API

dluptydi  于 2022-11-08  发布在  Scala
关注(0)|答案(1)|浏览(133)

我使用其他团队API(我们将其命名为otherTeamAPI)来调用数据,因此在我的函数中,我的代码如下所示:

def getData(host:String, port:Int, date: String): Map[String, String] = {
  val data = new otherTeamAPI(host,port)
  val latestData = data.getLatestData(date)
}

有人能教我如何使用Mockito在单元测试中做同样的事情来获得data吗?我不确定是否要使用下面的代码来获得new an api

val otherTeamAPI = Mock[otherTeamAPI]
otherTeamAPI.getLatestData(date)

如何在每次触发getData函数时得到data?我需要做一些新的模拟otherTeamAPI吗?

7d7tgy0s

7d7tgy0s1#

你的代码是不可测试的,你必须能够给你的方法传递一个OtherTeamAPI的示例,这样你的产品代码使用一个真实的示例,而测试代码可以使用一个假的示例(一个“模拟”)。
如何传递此示例取决于代码其余部分的结构:或者作为getData方法的参数,或者作为包含它的类的属性。
第一个如下所示:

def getData(api: OtherTeamApi, date: String): Map[String, String] = {
  val latestData = api.getLatestData(date)
  // ...
}

然后在测试中,您可以执行以下操作:

val fakeApi = mock[OtherTeamAPI]
when(fakeApi.getLatestData(anyString())).the return(...)

val result = getData(fakeApi, ...)

// Then assert on result

这是一个高层次的答案。您需要了解更多有关Mockito的信息,以确定您要执行的操作。

相关问题