我使用其他团队的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的知识,才能知道你想做什么。