Testing coroutines
In this section, we will focus on how you can test your coroutines. You can create tests for classes such as ViewModel
that launch a coroutine.
For coroutines launched using Dispatchers.Main
, your unit tests will fail with the following error message:
java.lang.IllegalStateException: Module with the Main dispatcher had failed to initialize. For tests Dispatchers.setMain from kotlinx-coroutines-test module can be used
This exception happens because Dispatchers.Main
uses Looper.getMainLooper()
, the application’s main thread. This main looper is not available in Android for local unit tests. To make your tests work, you must use the Dispatchers.setMain
extension function to change the Main
dispatcher. For example, you can create a function in your test class that will run before your tests:
@Before
fun setUp() {
Dispatchers.setMain(UnconfinedTestDispatcher())
}
The setUp
function will run before the tests. It will...