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



我使用其他团队的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)

如何得到data每次我触发我的功能getData?我需要做一些新的模拟otherTeamAPI吗?

按原样编写的代码是不可测试的。你必须能够给你的方法传递一个OtherTeamAPI的实例,这样你的生产代码就可以使用一个真实的实例,而测试代码可以使用一个假的(一个"mock")。

如何传递这个实例取决于你代码的其余部分的结构:要么作为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的知识,才能知道你想做什么。

相关内容

  • 没有找到相关文章

最新更新