मेरे पास एनएससीओडी का उपयोग करके जारी किए गए डेटा के साथ एक आईओएस एप्लीकेशन है और अधिक सटीक NSKeyedArchiver है। यह एप्लिकेशन ऐप स्टोर पर पहले से ही उपलब्ध है।यूनिट परीक्षण एनएससीओडी कैसे करें?
मैं एप्लिकेशन के संस्करण 2 पर काम कर रहा हूं और डेटा मॉडल बदलना चाहिए। इसलिए मुझे डेटा मॉडल माइग्रेशन को संभालने की ज़रूरत है। मैं इसे यूनिट परीक्षणों से ढंकना चाहता हूं।
मेरे परीक्षणों में, मैं गतिशील रूप से पुराने डेटा मॉडल के साथ लगातार डेटा उत्पन्न करना चाहता हूं, माइग्रेशन लॉन्च करना चाहता हूं और देख सकता हूं कि सब ठीक हो गया है या नहीं।
वर्तमान में, एक वस्तु संग्रह इस तरह दिखता है:
MyDataModelObject *object = ....
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
[archiver encodeObject:object forKey:key];
[archiver finishEncoding];
समस्या है, MyDataModelObject जा फिर से कारक हो सकता है या यहाँ तक कि आवेदन का संस्करण 2 में नष्ट कर दिया। तो मैं 'पुराने संस्करण संग्रह' उत्पन्न करने के लिए अपने परीक्षणों में इस कक्षा का उपयोग नहीं कर सकता।
क्या इस वर्ग का उपयोग किए बिना कक्षा के encodeWithCoder:
विधि में क्या किया गया है अनुकरण करने का कोई तरीका है?
क्या मैं प्राप्त करने के लिए चाहते हैं निम्नलिखित
- testMigrationFrom_v1_to_v2 {
// simulate an archive with v1 data model
// I want this part of the code to be as simple as possible
// I don't want to rely on old classes to generate the archive
NSDictionary *person = ... // { firstName: John, lastName: Doe }
NSDictionary *adress = ... // { street: 1 down street, city: Butterfly City }
[person setObject:adress forKey:@"adress"];
// there's something missing to tell the archiever that:
// - person is of type OldPersonDataModel
// - adress is of type OldAdressDataModel
[archiver encodeObject:person forKey:@"somePerson"];
// at this point, I would like the archive file to contain :
// a person object of type OldPersonDataModel, that has an adress object of type OldAdressModel
NewPersonModel *newPerson = [Migration readDataFromV1];
// assertions
NSAssert(newPerson.firstName, @"John");
NSAssert(newPerson.lastName, @"Doe");
}
आपके उत्तर के लिए धन्यवाद, मैंने इसे और अधिक स्पष्ट करने के लिए प्रश्न संपादित किया (उम्मीद है) – David
विशेषताएँ केएस एनएससीलास डिस्क्रिप्शन का हिस्सा है, जो आईओएस पर मौजूद नहीं है। – quellish