forge परीक्षण
Solidity टेस्ट
forge परीक्षण, CoddyKit पर Web3 और DApp विकास की मूल बातें का एक निःशुल्क पाठ है। यह 4 में से 2वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह Web3 और DApp विकास की मूल बातें सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Web3 और DApp विकास की मूल बातें पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
Tests ही Contracts हैं
Foundry में test file एक Solidity contract होती है, जो forge-std library के Test से inherit करती है। जिस public function का नाम test से शुरू होता है, उसे एक अलग test case के रूप में चलाया जाता है।
Test files test/ में रहती हैं और परंपरागत रूप से .t.sol suffix का उपयोग करती हैं।
import {Test} from "forge-std/Test.sol";
contract CounterTest is Test {
function testInitialZero() public {
// ...
}
}setUp Function
विशेष setUp() function हर test से पहले चलता है और प्रत्येक test को fresh, isolated state देता है। अपने contracts deploy करें और fixtures को यहीं seed करें।
Tests के बीच state reset होने के कारण कोई test गलती से किसी दूसरे test पर निर्भर नहीं हो सकता।
Counter counter;
function setUp() public {
counter = new Counter();
}Assertions
forge-std ऐसे अभिकथन सहायक उपलब्ध कराता है, जो सही न होने पर स्पष्ट संदेश के साथ परीक्षण विफल कर देते हैं:
assertEq(a, b)— समानताassertTrue(cond)/assertFalse(cond)assertGt,assertLt,assertGe,assertLe
function testIncrement() public {
counter.increment();
assertEq(counter.number(), 1);
}परीक्षण चलाना
forge test से पूरा परीक्षण-संग्रह चलाएँ। नाम के आधार पर --match-test या कॉन्ट्रैक्ट के आधार पर --match-contract से फ़िल्टर करें। लॉग और ट्रेस देखने के लिए -v फ़्लैग के माध्यम से वर्बोसिटी बढ़ाएँ।
$ forge test
$ forge test --match-test testIncrement -vvvरिवर्ट की अपेक्षा करना
जिस कॉल के विफल होने की अपेक्षा हो, उसके ठीक पहले vm.expectRevert का उपयोग करें। परीक्षण तभी सफल होता है जब अगली कॉल रिवर्ट हो, और वैकल्पिक रूप से किसी विशेष त्रुटि संदेश या कस्टम त्रुटि से मेल खाए।
function testOnlyOwner() public {
vm.prank(address(0xBEEF));
vm.expectRevert("not owner");
counter.adminReset();
}अकाउंट का प्रतिरूपण करना
vm.prank(addr) अगली कॉल के लिए msg.sender सेट करता है। vm.startPrank(addr) इसे vm.stopPrank() तक सभी कॉल पर लागू करता है। इससे कई कुंजियों से डिप्लॉय किए बिना अभिगम नियंत्रण का परीक्षण किया जा सकता है।
vm.startPrank(alice);
token.approve(spender, 100);
token.transfer(bob, 50);
vm.stopPrank();शेषराशि और समय में हेरफेर करना
चीटकॉड आपको परिवेश नियंत्रित करने देते हैं:
vm.deal(addr, amount)— किसी अकाउंट की ETH शेषराशि सेट करेंvm.warp(timestamp)— block.timestamp सेट करेंvm.roll(blockNum)— block.number सेट करें
इनसे समय-निर्भर और शेषराशि-निर्भर तर्क का नियतात्मक रूप से परीक्षण करना आसान हो जाता है।
vm.deal(alice, 10 ether);
vm.warp(block.timestamp + 7 days);
vm.roll(block.number + 100);इवेंट का परीक्षण करना
vm.expectEmit जाँचने वाले इवेंट फ़ील्ड घोषित करता है। इसके बाद अपेक्षित इवेंट और फिर उसे उत्सर्जित करने वाली कॉल लिखी जाती है। बूलियन मान यह चुनते हैं कि किन विषयों और डेटा का मिलान करना है।
vm.expectEmit(true, true, false, true);
emit Transfer(alice, bob, 100);
token.transfer(bob, 100);लेबल और लॉग
vm.label(addr, name) ट्रेस में पतों को पढ़ने योग्य नाम देता है। पर्याप्त वर्बोसिटी के साथ चलाने पर forge-std का console.log परीक्षणों के दौरान डीबग आउटपुट प्रिंट करता है।
import {console} from "forge-std/console.sol";
vm.label(alice, "Alice");
console.log("balance:", token.balanceOf(alice));फ़ोर्क परीक्षण
फाउंड्री किसी सक्रिय नेटवर्क का फ़ोर्क बना सकता है, ताकि आपके परीक्षण वास्तविक रूप से डिप्लॉय किए गए कॉन्ट्रैक्ट और स्थिति पर चलें। RPC URL सेट करें और किसी ब्लॉक को निश्चित करने के लिए vm.createSelectFork का उपयोग करें।
यह Uniswap या Aave जैसे प्रोटोकॉल के साथ एकीकरण का परीक्षण करने के लिए अत्यंत उपयोगी है, क्योंकि उन्हें दोबारा डिप्लॉय करने की आवश्यकता नहीं पड़ती।
function setUp() public {
vm.createSelectFork(vm.rpcUrl("mainnet"), 19000000);
}परीक्षणों का संगठन
forge परीक्षणों के लिए अच्छी पद्धतियाँ:
- प्रत्येक परीक्षण फ़ंक्शन में एक व्यवहार
testRevertWhenNotOwnerजैसे वर्णनात्मक नामsetUp()में साझा प्रारंभिक सेटअप- अभिगम नियंत्रण के लिए prank और समय-तर्क के लिए warp का उपयोग करें
- बाहरी एकीकरणों के लिए फ़ोर्क परीक्षण जोड़ें
त्वरित जाँच
फाउंड्री परीक्षण कॉन्ट्रैक्ट में setUp() फ़ंक्शन का उद्देश्य क्या है?
पुनरावलोकन
आपने forge परीक्षण के बारे में सीखा:
- परीक्षण Solidity कॉन्ट्रैक्ट होते हैं, जो
Testसे इनहेरिट करते हैं; फ़ंक्शनtestसे शुरू होते हैं setUp()प्रत्येक परीक्षण के लिए नई स्थिति देता है- अभिकथन:
assertEq,assertTrueआदि - चीटकॉड:
prank,deal,warp,expectRevert,expectEmit - फ़ोर्क परीक्षण सक्रिय नेटवर्क की स्थिति पर चलते हैं
अगला विषय: फ़ज़िंग और इनवेरिएंट परीक्षण।
एआई शिक्षक के साथ Web3 और DApp विकास की मूल बातें सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 29
- पाठ
- 105
अक्सर पूछे जाने वाले प्रश्न
क्या “forge परीक्षण” पाठ निःशुल्क है?
हाँ — Web3 और DApp विकास की मूल बातें अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “forge परीक्षण” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। Web3 और DApp विकास की मूल बातें पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“forge परीक्षण” में मैं क्या सीखूँगा?
Solidity टेस्ट आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Web3 और DApp विकास की मूल बातें का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या Web3 और DApp विकास की मूल बातें शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Web3 और DApp विकास की मूल बातें शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 2वाँ पाठ है।
“forge परीक्षण” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस Web3 और DApp विकास की मूल बातें पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर Web3 और DApp विकास की मूल बातें पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।