Mocking के Basics
In this page:
val mock = mockk<InterfaceName>()
every { mock.method(argument) } returns value
// call the code under test
verify { mock.method(argument) }
Creating a Mock
MockK जैसी एक mocking library test time पर किसी interface या class का एक नकली implementation generate कर सकती है, आपको बिल्कुल control करने देते हुए कि यह कैसे व्यवहार करे बिना किसी असली implementation की ज़रूरत के।
उदाहरण: Creating a Mock
import io.mockk.mockk
import io.mockk.every
interface UserRepository {
fun findName(id: Int): String
}
fun main() {
val repo = mockk<UserRepository>()
every { repo.findName(1) } returns "Ana"
println(repo.findName(1))
}
Login to try C/C++/Java/PHP code in the editor
Stubbing Behavior with every
every { mock.method(args) } returns value बिल्कुल configure करता है कि किसी specific call के लिए एक mock को क्या return करना चाहिए, किसी test को किसी भी scenario simulate करने देते हुए, edge cases सहित जो किसी असली implementation से trigger करना मुश्किल हो।
उदाहरण: Stubbing Behavior with every
import io.mockk.mockk
import io.mockk.every
interface PaymentGateway {
fun charge(amount: Double): Boolean
}
fun main() {
val gateway = mockk<PaymentGateway>()
every { gateway.charge(100.0) } returns false
println("Charge succeeded: ${gateway.charge(100.0)}")
}
Login to try C/C++/Java/PHP code in the editor
Verifying Interactions
verify { mock.method(args) } जांचता है कि किसी test के दौरान एक mock असल में उम्मीद के मुताबिक तरीके से call हुआ, सिर्फ एक return value के बजाय side-effecting behavior की पुष्टि करने के लिए उपयोगी।
उदाहरण: Verifying Interactions
import io.mockk.mockk
import io.mockk.verify
import io.mockk.every
interface Logger {
fun log(message: String)
}
fun main() {
val logger = mockk<Logger>(relaxed = true)
logger.log("Application started")
verify { logger.log("Application started") }
}
Login to try C/C++/Java/PHP code in the editor
Mocking in a Test Context
Mocks आमतौर पर किसी JUnit या Kotest test के अंदर test किए जा रहे code को उसकी असली dependencies, जैसे एक database या network client, से isolate करने के लिए उपयोग होते हैं, जो अन्यथा test को धीमा या अविश्वसनीय बना देते।
उदाहरण: Mocking in a Test Context
import io.mockk.mockk
import io.mockk.every
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.Assertions.assertEquals
interface UserRepository {
fun findName(id: Int): String
}
class GreetingServiceTest {
@Test
fun `greets user found in repository`() {
val repo = mockk<UserRepository>()
every { repo.findName(1) } returns "Ana"
val greeting = "Hello, ${repo.findName(1)}!"
assertEquals("Hello, Ana!", greeting)
}
}
Login to try C/C++/Java/PHP code in the editor
- किसी ऐसी type को mock करना जिसमें कोई असली behavioral seam न हो (जैसे एक साधारण data class), जबकि एक असली instance के साथ test करना सरल और ज़्यादा मायने रखने वाला होता।
- किसी mock के method behavior को call करने से पहले stub करना भूल जाना, जिससे test में एक default (अक्सर बेकार) return value मिलती है।
- इतना ज़्यादा mocking करना कि test असली test किए जा रहे code के बारे में किसी मायने रखने वाली चीज़ के बजाय mock के अपने configured behavior को verify करता है।
- Mocking किसी dependency का एक नकली stand-in implementation बनाता है, tests को इसके behavior को सटीक रूप से control करने देते हुए।
- MockK एक लोकप्रिय Kotlin-first mocking library है, आमतौर पर JUnit या Kotest के साथ उपयोग होती है।
every { mock.method() } returns valueकिसी specific call के लिए एक mock के behavior को stub करता है।verify { mock.method() }जांचता है कि test के दौरान mock के साथ एक particular interaction असल में हुआ।
Chapter Quiz — Complete all 6 topics to unlock
0/6 topics done
Complete these topics first: