我认为TeamImplsTest中的代码有些错误,我需要建议:D这是我的代码
API接口
interface API { @GET("lookupteam.php") fun getTeam(@Query("id") id: String): Call<TeamModel> }
TeamPresenter
interface MatchPresenter { fun loadTeamDetail(team_id: String) }
TeamImpls
class TeamImpls(val teamView: TeamView) : TeamPresenter {
override fun loadTeamDetail(team_id: String) {
val call = RetrofitConfig().getApi().getTeam(team_id)
call.enqueue(object : Callback {
override fun onResponse(call: Call, response: Response) {
if (response.isSuccessful()) {
val res = response.body()
res?.let { teamView.onSuccess(it) }
}
}
override fun onFailure(call: Call, t: Throwable) {
Log.e("PrevMatchFragment", t.toString())
}
})
}
}
TeamModel
data class TeamModel(
val teams: ArrayList
)
data class TeamModeLResult(
val idTeam: String,
val strTeam: String,
val strAlternate: String,
val strSport: String,
val strStadium: String,
val strTeamBadge: String
)
和
这是我的TeamImplsTest
class TeamImplsTest {
@Mock
private lateinit var teamView: TeamView
@Mock
private lateinit var teamPresenter: TeamPresenter
@Before
fun setUp() {
MockitoAnnotations.initMocks(this)
teamPresenter = TeamImpls(teamView)
}
@Test
fun loadTeamDetail() {
val teams = TeamModel(arrayListOf())
val teamId = "133613"
teamPresenter.loadTeamDetail(teamId)
Mockito.verify(teamView).onSuccess(teams)
}
}
我收到了错误
Wanted but not invoked:
teamView.onSuccess(TeamModel(teams=[]));
-> at com.fathurradhy.matchschedule.domain.presenter.TeamImplsTest.loadTeamDetail(TeamImplsTest.kt:34)
Actually, there were zero interactions with this mock.
Wanted but not invoked:
teamView.onSuccess(TeamModel(teams=[]));
-> at com.fathurradhy.matchschedule.domain.presenter.TeamImplsTest.loadTeamDetail(TeamImplsTest.kt:34)
Actually, there were zero interactions with this mock.
1 回答
您没有嘲笑API调用,因为loadTeamDetail创建了自己的API实例 .
为了使您能够测试API调用行为,您可以通过构造函数提供API实例,例如:
这将允许您模拟api行为并验证演示者在调用失败/成功时调用正确的方法,例如