NSCoding ve daha kesin olarak NSKeyedArchiver kullanılarak veriler kalıcı bir iOS uygulamasına sahibim. Bu uygulama App Store'da zaten mevcut.NSCoding nasıl birim testi yapılır?
Uygulamanın 2. sürümü üzerinde çalışıyorum ve veri modeli değişmeli. Bu yüzden veri modeli geçişini ele almam gerekiyor. Birim testleri ile kapsanmasını istiyorum.
Testlerimde, eski veri modeli ile kalıcı veriyi dinamik olarak oluşturmak, geçişi başlatmak ve her şeyin yolunda gittiğini görmek istiyorum.
Halen bir nesneyi arşivleme şuna benzer:
MyDataModelObject *object = ....
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
[archiver encodeObject:object forKey:key];
[archiver finishEncoding];
sorundur, MyDataModelObject yeniden çarpanlara hatta uygulamanın 2. sürümünde silinebilir. Bu yüzden sınamalarımda 'eski sürüm arşivi' oluşturmak için bu sınıfı kullanamıyorum.
Bu sınıfı kullanmadan, bir sınıfın encodeWithCoder:
yönteminde ne yapıldığını simüle etmenin bir yolu var mı?
Ne elde etmek istiyorum aşağıdaki
- 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");
}
Cevabınız için teşekkürler, daha net (umarım) – David
attributeKeys, iOS'ta bulunmayan NSClassDescription'ın bir parçasıdır. – quellish