我认为TeamImplsTest中的代码有些错误,我需要建议:D这是我的代码
API接口
interface API {
@GET("lookupteam.php")
fun getTeam(@Query("id") id: String): Call<TeamModel>
}
团队演示
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.
您没有嘲笑API调用,因为loadTeamDetail创建了自己的API实例。
为了使您能够测试API调用行为,您可以通过构造函数提供API实例,例如:
class TeamImpls(private val api: API, private val teamView: TeamView) : TeamPresenter {
override fun loadTeamDetail(team_id: String) {
val call = api.getTeam(team_id)
这将允许您模拟api行为并验证演示者在调用失败/成功时调用正确的方法,例如
class TeamImplsTest {
@Mock
private lateinit var teamView: TeamView
@Mock
private lateinit var api: API
@Mock
private lateinit var teamPresenter: TeamPresenter
@Before
fun setUp() {
MockitoAnnotations.initMocks(this)
teamPresenter = TeamImpls(api, teamView)
}
@Test
fun loadTeamDetail() {
val teams = TeamModel(arrayListOf())
val teamId = "133613"
// Use retrofit-mock to create your mockResponse.
// See: https://github.com/square/retrofit/tree/master/retrofit-mock
Mockito.`when`(api.getTeam(teamId)).thenReturn(Calls.response(teams)
teamPresenter.loadTeamDetail(teamId)
Mockito.verify(teamView).onSuccess(teams)
}
}