iOS
XCTest फ्रेमवर्क - यूनिट परीक्षण
खोज…
Xcode प्रोजेक्ट में टेस्ट फाइल्स जोड़ना
प्रोजेक्ट बनाते समय
आपको प्रोजेक्ट निर्माण संवाद में "यूनिट टेस्ट शामिल करें" की जांच करनी चाहिए।
प्रोजेक्ट बनाने के बाद
यदि आप अपना प्रोजेक्ट बनाते समय उस आइटम की जाँच करने से चूक गए हैं, तो आप हमेशा बाद में परीक्षण फ़ाइलें जोड़ सकते हैं। ऐसा करने के लिए:
1- Xcode में अपने प्रोजेक्ट सेटिंग्स में जाएं
2- "लक्ष्य" पर जाएं
3- "लक्ष्य जोड़ें" पर क्लिक करें
4- "अन्य" के तहत, "कोको टच यूनिट टेस्ट टेस्टिंग बंडल" चुनें
अंत में, आपके पास एक फ़ाइल होनी चाहिए जिसका नाम [Your app name]Tests.swift
। ऑब्जेक्टिव-सी में, आपके पास दो फाइलें होनी चाहिए, जिनका नाम [Your app name]Tests.h
और [Your app name]Tests.m
।
[Your app name]Tests.swift or .m
फ़ाइल डिफ़ॉल्ट रूप से शामिल होगी:
- एक
XCTest
मॉड्यूल आयात - एक
[Your app name]Tests
क्लास जोXCTestCase
विस्तारXCTestCase
-
setUp
,tearDown
,testExample
,testPerformanceExample
तरीकों
तीव्र
import XCTest
class MyProjectTests: XCTestCase {
override func setUp() {
super.setUp()
// Put setup code here. This method is called before the invocation of each test method in the class.
}
override func tearDown() {
// Put teardown code here. This method is called after the invocation of each test method in the class.
super.tearDown()
}
func testExample() {
// This is an example of a functional test case.
// Use XCTAssert and related functions to verify your tests produce the correct results.
}
func testPerformanceExample() {
// This is an example of a performance test case.
self.measure {
// Put the code you want to measure the time of here.
}
}
}
उद्देश्य सी
#import <XCTest/XCTest.h>
@interface MyProjectTests : XCTestCase
@end
@implementation MyProjectTests
- (void)setUp {
[super setUp];
// Put setup code here. This method is called before the invocation of each test method in the class.
}
- (void)tearDown {
// Put teardown code here. This method is called after the invocation of each test method in the class.
[super tearDown];
}
- (void)testExample {
// This is an example of a functional test case.
// Use XCTAssert and related functions to verify your tests produce the correct results.
}
- (void)testPerformanceExample {
// This is an example of a performance test case.
[self measureBlock:^{
// Put the code you want to measure the time of here.
}];
}
@end
स्टोरीबोर्ड और व्यू कंट्रोलर को परीक्षण फ़ाइल के उदाहरण के रूप में जोड़ना
इकाई परीक्षण के साथ आरंभ करने के लिए, जो परीक्षण फ़ाइल में किया जाएगा और व्यू कंट्रोलर और स्टोरीबोर्ड का परीक्षण करेगा, हमें इन दो फ़ाइलों को परीक्षण फ़ाइल में पेश करना चाहिए।
नियंत्रक देखें
तीव्र
var viewController : ViewController!
स्टोरीबोर्ड का परिचय और देखें नियंत्रक को प्रारंभ करना
इस कोड को setUp()
विधि में जोड़ें:
तीव्र
let storyboard = UIStoryboard(name: "Main", bundle: nil)
viewController = storyboard.instantiateInitialViewController() as! ViewController
उद्देश्य सी
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:"Main" bundle:nil];
viewController = (ViewController *) [storyboard instantiateInitialViewController];
इस तरह, आप परीक्षण विधियों को लिख सकते हैं, और उन्हें पता चल जाएगा कि त्रुटियों के लिए कहां जांचना है। इस मामले में, दृश्य नियंत्रक और स्टोरीबोर्ड हैं।
परीक्षण विधियों को जोड़ना
Apple के अनुसार:
परीक्षण विधियाँ
एक परीक्षण विधि एक परीक्षण वर्ग का एक उदाहरण विधि है जो उपसर्ग परीक्षण से शुरू होता है, कोई पैरामीटर नहीं लेता है, और शून्य देता है, उदाहरण के लिए, (शून्य) testColorIsRed ()। एक परीक्षण विधि आपके प्रोजेक्ट में कोड का उपयोग करती है और, यदि वह कोड अपेक्षित परिणाम नहीं देता है, तो अभिकथन एपीआई के एक सेट का उपयोग करके विफलताओं की रिपोर्ट करता है। उदाहरण के लिए, किसी फ़ंक्शन के रिटर्न वैल्यू की तुलना एक अपेक्षित मूल्य के मुकाबले की जा सकती है या आपका परीक्षण यह दावा कर सकता है कि आपके किसी एक वर्ग में किसी विधि का अनुचित उपयोग अपवाद फेंकता है।
तो हम विधि के उपसर्ग के रूप में "परीक्षण" का उपयोग करके एक परीक्षण विधि जोड़ते हैं, जैसे:
तीव्र
func testSomething() {
}
उद्देश्य सी
- (void)testSomething {
}
वास्तव में परिणामों का परीक्षण करने के लिए, हम XCTAssert()
पद्धति का उपयोग करते हैं, जो एक बूलियन अभिव्यक्ति लेता है, और यदि सही है, तो परीक्षण को सफल के रूप में चिह्नित करता है, अन्यथा यह इसे विफल के रूप में चिह्नित करेगा।
मान लीजिए कि हमारे पास व्यू कंट्रोलर क्लास में एक विधि है, जिसे sum()
कहा जाता है, जो दो संख्याओं के योग की गणना करता है। इसका परीक्षण करने के लिए, हम इस विधि का उपयोग करते हैं:
तीव्र
func testSum(){
let result = viewController.sum(4, and: 5)
XCTAssertEqual(result, 9)
}
उद्देश्य सी
- (void)testSum {
int result = [viewController sum:4 and:5];
XCTAssertEqual(result, 9);
}
ध्यान दें
डिफ़ॉल्ट रूप से, यदि आप स्टोरीबोर्ड फ़ाइल में पहली बार बनाए गए हैं, तो आप टेस्ट क्लास से व्यू कंट्रोलर क्लास के लेबल, टेक्स्ट बॉक्स या अन्य यूआई आइटम का उपयोग नहीं कर सकते। ऐसा इसलिए होता है क्योंकि इन्हें व्यू कंट्रोलर क्लास के
loadView()
विधि में इनिशियलाइज़ किया जाता है, और टेस्टिंग के समय इसे नहीं कहा जाएगा।loadView()
view
loadView()
और अन्य सभी आवश्यक तरीकों को कॉल करने का सबसे अच्छा तरीका हमारीview
viewController
की संपत्ति की संपत्ति तक पहुंच रहा है। UI तत्वों का परीक्षण करने से पहले आपको इस पंक्ति को जोड़ना चाहिए:
XCTAssertNotNil(viewController.view)
परीक्षण शुरू करें
एक विशिष्ट विधि का परीक्षण
किसी विशिष्ट विधि का परीक्षण करने के लिए, विधि परिभाषा के बगल में स्थित वर्ग पर क्लिक करें।
सभी तरीकों का परीक्षण
सभी विधियों का परीक्षण करने के लिए, वर्ग परिभाषा के बगल में स्थित वर्ग पर क्लिक करें।
परीक्षण परिणाम देखें
यदि परिभाषा के आगे एक हरे रंग की जांच है, तो परीक्षण सफल रहा है।
यदि परिभाषा के बगल में एक लाल क्रॉस है, तो परीक्षण विफल हो गया है।
सभी परीक्षण चल रहे हैं
Product -> Test OR Cmd + U
यह सभी परीक्षण लक्ष्य से सभी परीक्षण चलाएगा!
एक मॉड्यूल आयात करें जिसे यह परीक्षण किया जा सकता है
कक्षाएं, संरचना, एनम और उनके सभी तरीके डिफ़ॉल्ट रूप से internal
हैं। इसका मतलब है कि उन्हें केवल एक ही मॉड्यूल से एक्सेस किया जा सकता है। परीक्षण के मामले एक अलग लक्ष्य में हैं इसका मतलब यह है कि वे एक अलग मॉड्यूल में हैं। जिस विधि का आप परीक्षण करना चाहते हैं, उस तक पहुंचने में सक्षम होने के लिए, आपको @testable
कीवर्ड का उपयोग करके परीक्षण किए जाने वाले मॉड्यूल को आयात करना होगा।
मान लीजिए कि हमारे पास ToDo
नामक एक मुख्य मॉड्यूल है और हम इसके लिए परीक्षण लिखना चाहते हैं। हम उस मॉड्यूल को इस तरह आयात करेंगे:
@testable import ToDo
इस इम्पोर्ट स्टेटमेंट के साथ फाइल में सभी टेस्ट मेथड्स अब सभी internal
कक्षाओं, स्ट्रक्चर्स, एनमोंस और ToDo
मॉड्यूल के सभी internal
तरीकों तक पहुंच सकते हैं।
आपको उन तत्वों के साथ फ़ाइलों को कभी नहीं जोड़ना चाहिए जिन्हें आप परीक्षण लक्ष्य पर परीक्षण करना चाहते हैं क्योंकि इससे हार्ड डिबग की समस्या हो सकती है।
ट्रिगर देखने लोडिंग और उपस्थिति
लोडिंग देखें
एक दृश्य नियंत्रक के लिए एक परीक्षण में आप कभी-कभी loadView()
या viewDidLoad()
के निष्पादन को ट्रिगर करना चाहते हैं। यह दृश्य तक पहुंचकर किया जा सकता है। मान लें कि आपके पास sut
नामक प्रणाली में परीक्षण नियंत्रक है (सिस्टम अंडर टेस्ट), तो कोड इस तरह दिखेगा:
XCTAssertNotNil(sut.view)
रूप दिखना
आप नीचे दिए गए कोड को जोड़कर तरीकों को भी देख सकते हैं viewWillAppear(_:)
और viewDidAppear(_:)
:
sut.beginAppearanceTransition(true, animated: true)
sut.endAppearanceTransition()
टेस्ट क्लास लिखना
import XCTest
@testable import PersonApp
class PersonTests: XCTestCase {
func test_completeName() {
let person = Person(firstName: "Josh", lastName: "Brown")
XCTAssertEqual(person.completeName(), "Josh Brown")
}
}
अब चर्चा करते हैं कि यहाँ क्या हो रहा है। import XCTest
लाइन हमें XCTestCase
का विस्तार XCTestCase
और XCTAssertEqual
(अन्य दावे के बीच) का उपयोग करने की अनुमति देगा। विस्तार XCTestCase
और के साथ हमारे परीक्षण नाम लगाकर test
सुनिश्चित करेगा जब परियोजना (⌘U या उत्पाद> टेस्ट) में परीक्षण चल रहा है कि Xcode स्वचालित रूप से इस परीक्षा में चलाता है। @testable import PersonApp
लाइन हमारे PersonApp
टार्गेट को इम्पोर्ट PersonApp
इसलिए हम इसमें से क्लास जैसे टेस्ट और इस्तेमाल कर सकते हैं, जैसे ऊपर दिए गए उदाहरण में Person
। और अंत में, हमारा XCTAssertEqual
यह सुनिश्चित करेगा कि person.completeName()
स्ट्रिंग "Josh Brown"
बराबर है।