JUnit के साथ यूनिट परीक्षण
JUnit 4 के साथ तेज़ और विश्वसनीय यूनिट tests लिखें। @Test, @Before, @After और assertions का उपयोग करें, InstantTaskExecutorRule से LiveData का परीक्षण करें और runTest से coroutines का परीक्षण करें।
JUnit के साथ यूनिट परीक्षण, CoddyKit पर Android Academy का एक निःशुल्क पाठ है। यह 4 में से 1वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह Android Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Android Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
परीक्षण क्यों लिखें?
परीक्षण कोई विलासिता नहीं हैं — ये आपकी सुरक्षा-जाल हैं:
- उपयोगकर्ताओं के सामने आने से पहले बग पकड़ें
- विश्वास के साथ कोड का पुनर्गठन करें (यदि परीक्षण सफल होते हैं, तो कुछ नहीं टूटा)
- अपेक्षित व्यवहार का दस्तावेज़ बनाएँ
- नई सुविधाएँ जोड़ते समय प्रतिगमन रोकें
अच्छी तरह परीक्षित कोड आमतौर पर बेहतर ढंग से डिज़ाइन किया हुआ भी होता है — यदि उसका परीक्षण करना कठिन है, तो संभवतः उसका design बहुत अधिक कसकर युग्मित है।
Android परीक्षणों के प्रकार
दो श्रेणियाँ:
- यूनिट परीक्षण (
test/फ़ोल्डर) — JVM पर चलते हैं, डिवाइस की आवश्यकता नहीं होती। तेज़ होते हैं। साधारण Kotlin/Java तर्क का परीक्षण करते हैं। - इंस्ट्रुमेंटेड परीक्षण (
androidTest/फ़ोल्डर) — डिवाइस या एम्युलेटर पर चलते हैं। धीमे होते हैं। Android-विशिष्ट कोड (Room DB, UI) का परीक्षण करते हैं।
व्यावसायिक तर्क के लिए यूनिट परीक्षणों को प्राथमिकता दें। इंस्ट्रुमेंटेड परीक्षणों का उपयोग केवल तब करें जब Android API के साथ काम करना आवश्यक हो।
JUnit 4 सेटअप
Android प्रोजेक्ट में JUnit 4 डिफ़ॉल्ट रूप से शामिल होता है। इन्हें app/build.gradle में जोड़ें:
// app/build.gradle:
dependencies {
testImplementation 'junit:junit:4.13.2'
testImplementation 'org.jetbrains.kotlinx:kotlinx-coroutines-test:1.7.3'
testImplementation 'androidx.arch.core:core-testing:2.2.0' // for LiveData
}आपका पहला JUnit परीक्षण
src/test/java/ में एक class बनाएँ और परीक्षण विधियों पर @Test लगाएँ:
import org.junit.Test
import org.junit.Assert.*
class CalculatorTest {
private val calc = Calculator()
@Test
fun `addition returns correct sum`() {
val result = calc.add(2, 3)
assertEquals(5, result)
}
@Test
fun `division by zero throws exception`() {
assertThrows(ArithmeticException::class.java) {
calc.divide(10, 0)
}
}
}@Before और @After
प्रत्येक परीक्षण के आसपास स्थिति तैयार करने और साफ़ करने के लिए जीवनचक्र annotations का उपयोग करें:
class UserRepositoryTest {
private lateinit var repo: UserRepository
private lateinit var fakeDao: FakeUserDao
@Before
fun setUp() {
fakeDao = FakeUserDao() // fresh instance before each test
repo = UserRepository(fakeDao)
}
@After
fun tearDown() {
fakeDao.clear() // clean up after each test
}
@Test
fun `getUsers returns all users`() {
fakeDao.insert(User(1, "Alice"))
fakeDao.insert(User(2, "Bob"))
assertEquals(2, repo.getUsers().size)
}
}सामान्य अभिकथन
JUnit Assert.* में अभिकथन विधियाँ उपलब्ध कराता है:
// Equality:
assertEquals(expected, actual)
assertNotEquals(unexpected, actual)
// Null:
assertNull(value)
assertNotNull(value)
// Boolean:
assertTrue(condition)
assertFalse(condition)
// Same object reference:
assertSame(expected, actual)
// Custom message on failure:
assertEquals("User ID should be 1", 1, user.id)
// Exception:
assertThrows(IllegalArgumentException::class.java) {
User(id = -1, name = "")
}ViewModel का परीक्षण
LiveData का परीक्षण करने के लिए InstantTaskExecutorRule जोड़ें, ताकि LiveData समकालिक रूप से पोस्ट हो:
class UserViewModelTest {
@get:Rule
val instantTaskRule = InstantTaskExecutorRule()
private val fakeRepo = FakeUserRepository()
private lateinit var viewModel: UserViewModel
@Before
fun setUp() {
viewModel = UserViewModel(fakeRepo)
}
@Test
fun `users are loaded on init`() {
fakeRepo.usersToReturn = listOf(User(1, "Alice"), User(2, "Bob"))
viewModel.loadUsers()
val result = viewModel.users.value
assertNotNull(result)
assertEquals(2, result?.size)
}
}Coroutines का परीक्षण
परीक्षणों में coroutine execution को नियंत्रित करने के लिए TestCoroutineDispatcher / StandardTestDispatcher का उपयोग करें:
class SyncWorkerTest {
@get:Rule
val instantTaskRule = InstantTaskExecutorRule()
private val testDispatcher = StandardTestDispatcher()
@Before
fun setUp() {
Dispatchers.setMain(testDispatcher)
}
@After
fun tearDown() {
Dispatchers.resetMain()
}
@Test
fun `sync completes successfully`() = runTest {
val repo = FakeRepository()
val worker = SyncUseCase(repo, testDispatcher)
val result = worker.run()
assertTrue(result.isSuccess)
}
}Fake बनाम Mock
परीक्षणों में वास्तविक dependencies को बदलने की दो रणनीतियाँ:
- Fake — परीक्षण के लिए बनाया गया कार्यशील implementation (जैसे, वास्तविक database के बजाय मेमोरी में रखी सूची)। लिखना आसान, पढ़ने योग्य और किसी library की आवश्यकता नहीं।
- Mock — अपने-आप बनाया गया stub, जो calls दर्ज करता है और आपको interactions सत्यापित करने देता है (Mockito, MockK)। अधिक शक्तिशाली, लेकिन अत्यधिक उपयोग करने पर नाज़ुक हो सकता है।
सरल मामलों में Fakes को प्राथमिकता दें; method calls सत्यापित करने के लिए Mocks का उपयोग करें।
Fake लिखना
एक Fake, वास्तविक class के समान interface लागू करता है, लेकिन मेमोरी में storage का उपयोग करता है:
interface UserDao {
fun getAll(): List<User>
fun insert(user: User)
}
class FakeUserDao : UserDao {
private val storage = mutableListOf<User>()
override fun getAll(): List<User> = storage.toList()
override fun insert(user: User) { storage.add(user) }
fun clear() { storage.clear() }
}परीक्षण नामकरण परंपरा
अच्छे परीक्षण नाम बताते हैं कि किसका परीक्षण किया जा रहा है और अपेक्षित परिणाम क्या है। पढ़ने योग्य विवरणों के लिए Kotlin में backtick function names का उपयोग करें:
`getUsers returns empty list when no users exist``login throws exception when password is blank``add returns correct sum for negative numbers`
पैटर्न: `subject does X when Y`
त्वरित जाँच
JUnit परीक्षण class में @Before का उद्देश्य क्या है?
पुनरावलोकन: JUnit के साथ यूनिट परीक्षण
विश्वसनीय ऐप परीक्षित ऐप होते हैं:
- यूनिट परीक्षण
src/test/में रखें और JVM पर चलाएँ — तेज़ @Testलगाएँ औरassertEquals,assertTrue,assertThrowsका उपयोग करें- तैयारी और सफ़ाई के लिए
@Before/@After - LiveData का समकालिक परीक्षण करने के लिए
InstantTaskExecutorRule - coroutine परीक्षण के लिए
runTest+StandardTestDispatcher - सरल प्रतिस्थापनों के लिए Mocks की तुलना में Fakes को प्राथमिकता दें
अगला विषय: interactions सत्यापित करने के लिए Mockito के साथ mocking।
एआई शिक्षक के साथ Kotlin सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 36
- पाठ
- 152
अक्सर पूछे जाने वाले प्रश्न
क्या “JUnit के साथ यूनिट परीक्षण” पाठ निःशुल्क है?
हाँ — Android Academy अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “JUnit के साथ यूनिट परीक्षण” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। Android Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“JUnit के साथ यूनिट परीक्षण” में मैं क्या सीखूँगा?
JUnit 4 के साथ तेज़ और विश्वसनीय यूनिट tests लिखें। @Test, @Before, @After और assertions का उपयोग करें, InstantTaskExecutorRule से LiveData का परीक्षण करें और runTest से coroutines का परीक्षण करें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Android Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या Android Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Android Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 1वाँ पाठ है।
“JUnit के साथ यूनिट परीक्षण” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस Android Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर Android Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- JUnit के साथ यूनिट परीक्षण
- Mockito के साथ मॉकिंग
- Espresso के साथ UI परीक्षण
- डीबगिंग और प्रोफाइलिंग