I try to compare two SpannableStrings texts on my unit test and I receive the error:
java.lang.RuntimeException: Method toString in android.text.SpannableString not mocked. See http://g.co/androidstudio/not-mocked for details.
After debug, I verify that I can't use the SpannableString class at all on Unit Tests.
Test Implementation:
@Test
fun `When getCredits() returns multiple invites`() = testDispatcher.testCoroutineDispatcher.runBlockingTest {
//Change mock response
repository.setMultipleInvitesResponse()
//Call ViewModel method to return credits
testDispatcher.testCoroutineDispatcher.pauseDispatcher()
viewModel.getCredits()
testDispatcher.testCoroutineDispatcher.resumeDispatcher()
//Get remote SpannableString invites
val invites = "You have 5 invites"
// Initialize viewModel.showInvitesText.value
val showInvitesTextValue: SpannableString = viewModel.showInvitesText.value
//Compare view model showInvitesText.value with invites
assertEquals(showInvitesTextValue.toString(), invites)
}
Stacktrace:
java.lang.RuntimeException: Method toString in android.text.SpannableString not mocked. See http://g.co/androidstudio/not-mocked for details.
at android.text.SpannableString.toString(SpannableString.java)
at java.lang.String.valueOf(String.java:2994)
at view_model.ViewModelTest$When getCredits() returns multiple invites$1.invokeSuspend(ViewModelTest.kt:113)
at ViewModelTest$When getCredits() returns multiple invites$1.invoke(ViewModelTest.kt)
at kotlinx.coroutines.test.TestBuildersKt$runBlockingTest$deferred$1.invokeSuspend(TestBuilders.kt:50)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
at kotlinx.coroutines.test.TestCoroutineDispatcher.dispatch(TestCoroutineDispatcher.kt:50)
at kotlinx.coroutines.internal.DispatchedContinuationKt.resumeCancellableWith(DispatchedContinuation.kt:305) ...
The error occurs on showInvitesTextValue variable initialization.
How can I use SpannableString class on Unit Tests?