Reputation: 55
Just want to ask about my Unit.Testing error, so i have Unit.Testing like below and when i run this test i get error Wanted but not invoked: Actually, there were zero interactions with this mock. the point is i want to test that my requested data from the api is successfully displayed.
in the gradle, i already implement the
My UnitTesting is like this, i used mockito to do the test:
import com.google.gson.Gson
import com.panritech.fuad.footballmatchapp.TestContextProvider
import com.panritech.fuad.footballmatchapp.api.ApiRepository
import com.panritech.fuad.footballmatchapp.api.TheSportDBApi
import com.panritech.fuad.footballmatchapp.model.MatchItem
import com.panritech.fuad.footballmatchapp.model.MatchItemResponse
import com.panritech.fuad.footballmatchapp.view.MatchView
import org.junit.Test
import org.junit.Before
import org.mockito.Mock
import org.mockito.Mockito.`when`
import org.mockito.Mockito.verify
import org.mockito.MockitoAnnotations
class MatchPresenterTest {
@Mock
private lateinit var matchView: MatchView
@Mock
private lateinit var gson: Gson
@Mock
private lateinit var apiRepository: ApiRepository
@Mock
private lateinit var theSportDBApi: TheSportDBApi
private lateinit var presenter: MatchPresenter
@Before
fun setUp(){
MockitoAnnotations.initMocks(this)
presenter = MatchPresenter(matchView,apiRepository, gson, TestContextProvider())
}
@Test
fun testGetMatchList() {
val match: MutableList<MatchItem> = mutableListOf()
val response = MatchItemResponse(match)
val league = "4328"
`when`(gson.fromJson(apiRepository
.doRequest(theSportDBApi.getMatch(league))
,MatchItemResponse::class.java)).thenReturn(response)
presenter.getMatchList(league)
verify(matchView).showMatchList(match)
}
}
The Error Detail is Like Below:
Wanted but not invoked:
matchView.showMatchList([]);
-> at com.panritech.fuad.footballmatchapp.presenter.MatchPresenterTest.testGetMatchList(MatchPresenterTest.kt:52)
Actually, there were zero interactions with this mock.
Wanted but not invoked:
matchView.showMatchList([]);
-> at com.panritech.fuad.footballmatchapp.presenter.MatchPresenterTest.testGetMatchList(MatchPresenterTest.kt:52)
Actually, there were zero interactions with this mock.
at com.panritech.fuad.footballmatchapp.presenter.MatchPresenterTest.testGetMatchList(MatchPresenterTest.kt:52)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMainV2.main(AppMainV2.java:131)
Here is my Presenter
class MatchPresenter(private val matchView: MatchView,
private val apiRepository: ApiRepository,
private val gson: Gson,
private val context: CoroutineContextProvider = CoroutineContextProvider()) {
fun getMatchList(league: String?) {
async(context.main){
val data = bg {
gson.fromJson(apiRepository
.doRequest(TheSportDBApi.getMatch(league))
, MatchItemResponse::class.java
)
}
matchView.showMatchList(data.await().events)
}
}
}
Upvotes: 4
Views: 1864
Reputation: 493
In my case, I was able to execute tests independently but when I try to execute the entire file some of the tests fails. The solution added by OP in the comment worked for me. we have just had to put the verify
function inside a launch
TestCoroutineScope().launch {
verify(useCase, times(1)).getDetails()
}
Upvotes: 6