package com.example.mockktest
import android.os.Bundle
import android.widget.Button
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import io.mockk.mockk
import io.mockk.verify
import io.mockk.every
import io.mockk.confirmVerified
interface Dependency {
fun doWork()
}
class Worker(private val dependency: Dependency) {
fun perform() {
dependency.doWork()
}
}
class MockKTestActivity : AppCompatActivity() {
private lateinit var resultTextView: TextView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_mockk_test)
resultTextView = findViewById(R.id.resultTextView)
val runTestButton: Button = findViewById(R.id.runTestButton)
runTestButton.setOnClickListener {
val result = runMockKTest()
resultTextView.text = if (result) "Test Passed" else "Test Failed"
}
}
private fun runMockKTest(): Boolean {
val mockDependency = mockk<Dependency>(relaxed = true)
val worker = Worker(mockDependency)
worker.perform()
return try {
verify { mockDependency.doWork() }
confirmVerified(mockDependency)
true
} catch (e: Exception) {
false
}
}
}We define an interface Dependency with a method doWork(). The Worker class takes a Dependency and calls doWork() inside its perform() method.
In the activity, we create a mock of Dependency using MockK with relaxed = true so it won't throw errors on unmocked calls. We then create a Worker with this mock and call perform().
We verify that doWork() was called on the mock using verify. If verification passes, we return true; otherwise false.
The button triggers this test and updates the UI text to show if the test passed or failed.