Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

142
Views
MockitoJUnit tests running in Android Studio but failed when running on the command line

I'm trying to run unit tests using MockitoJUnitRunner; they run fine under Android Studio, but some (not all) tests fail when running in the command line - which is a big deal, I need to be able to run them from my continuous integration platform, not just from an IDE. Here's one of the the actual method being tested:

internal fun requestSecurityQuestion() {
    if (isViewAttached) mvpView.showLoadingDialog()

    api.getSecurityQuestionToday(mDataManager.token,
            ACTION_ASK_SECURITY_QUESTION_ON_LOGIN, 0)
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribeWith(object : CallbackWrapper<SettingsResponse>(mDataManager) {
                override fun onSuccess(response: SettingsResponse) {
                    mDataManager.securityQuestion = response.question
                    mDataManager.processId = response.processId

                    if (isViewAttached) {
                        mvpView.dismissLoadingDialog()
                        mvpView.showVsecVerificationDialog(0, response.question!!)
                    }
                }

                override fun onFailed(errorId: Int, jsonResponse: String?) {
                    if (isViewAttached) mvpView.dismissLoadingDialog()
                }
            })
}

Here's one of the tests that fail:

@RunWith(MockitoJUnitRunner::class)
class HomePresenterTest {

@Mock
private var mView: HomeView? = null
@Mock
private var mDataManager: DataManager? = null
@Mock
private var mApi: Api? = null

lateinit var mPresenter: HomePresenter

@Before
fun setUp() {
    mPresenter = spy(HomePresenter(mDataManager!!))
    mPresenter.attachView(mView!!)
}

@Test
fun requestSecurityQuestion_onSuccess() {
    val response = SettingsResponse()
    response.question = TestData.secretQuestion
    response.processId = TestData.processId

    `when`(mPresenter.api).thenReturn(mApi)
    `when`(mDataManager!!.token).thenReturn(TestData.userToken)
    `when`<Observable<SettingsResponse>>(mApi!!.getSecurityQuestionToday(
            TestData.userToken, ACTION_ASK_SECURITY_QUESTION_ON_LOGIN, 0))
            .thenReturn(Observable.just(response))

    mPresenter.requestSecurityQuestion()

    verify<HomeView>(mView).dismissLoadingDialog()
    verify<HomeView>(mView).showVsecVerificationDialog(0, TestData.secretQuestion)
}
}

And here's what I get when running the tests on command line using ./gradlew testDebugUnitTest

> Task :app:testDebugUnitTest 

com.domain.app.screens.main.home.HomePresenterTest > requestSecurityQuestion_onSuccess FAILED
org.mockito.exceptions.verification.WantedButNotInvoked at HomePresenterTest.kt:306

Also: I'm using Android Studio 3.1.4, Gradle version is 3.1.2, Mockito's version is 2.8.9

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

I had the same problem, but with Java.

The reason for me was, that I tried to return a mock on a method that was called in a static context, therefor wasn't bothered by my Mockito.when() call. Even though it is bad practice to do so, I moved the method call out of the static context, because there was no need for it to be static, and the it worked.

Maybe that helps.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!