Этот мой код ниже. Я хочу использовать модульное тестирование для этого файла. Я хочу знать, если это возможно для модульного тестирования в XCTest этого кодПроблемы с кодеком NSCoder
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
@interface Presenter : NSObject
@property (nonatomic, retain) NSString *Name;
@property (nonatomic, retain) NSString *Topic;
@property (nonatomic, retain) NSString *Date;
@property (nonatomic, retain) NSString *Time;
@property (nonatomic, retain) NSString *Location;
@property (nonatomic, retain) UIImage *image;
@property (nonatomic, retain) NSMutableDictionary *rattings;
@property (nonatomic, assign) BOOL isLiked;
@end
Этих М-файл:
#import "Presenter.h"
@implementation Presenter
- (id) initWithCoder: (NSCoder *)coder
{
if (self = [super init])
{
self.Name = [coder decodeObjectForKey:@"Name"];
self.Topic = [coder decodeObjectForKey:@"Topic"];
self.Date = [coder decodeObjectForKey:@"Date"];
self.Time = [coder decodeObjectForKey:@"Time"];
self.Location = [coder decodeObjectForKey:@"Location"];
self.image = [coder decodeObjectForKey:@"image"];
self.rattings = [coder decodeObjectForKey:@"rattings"];
self.isLiked = [coder decodeBoolForKey:@"isLiked"];
}
return self;
}
- (void) encodeWithCoder: (NSCoder *)coder
{
[coder encodeObject: self.Name forKey:@"Name"];
[coder encodeObject: self.Topic forKey:@"Topic"];
[coder encodeObject: self.Date forKey:@"Date"];
[coder encodeObject: self.Time forKey:@"Time"];
[coder encodeObject: self.Location forKey:@"Location"];
[coder encodeObject: self.image forKey:@"image"];
[coder encodeObject: self.rattings forKey:@"rattings"];
[coder encodeBool: self.isLiked forKey:@"isLiked"];
}
@end
Я нашел это о модульном тестировании NSCoder
и попытался применить его, но моя попытка на это выдает эту ошибку: поймал «NSInvalidArgumentException», «- [__ NSCFConstantString countByEnumeratingWithState: objects: count:]: unrecognized selecto г
- (void)testName {
NSLog(@"%@ start", self.name); // self.name is the name of the test-case method.
NSKeyedArchiver *archive = [[NSKeyedArchiver alloc] initForWritingWithMutableData:(NSMutableData *)presenter];
[archive encodeObject:presenter forKey:@"Name"];
for (NSString *Name in presenter.Name) {
[archive encodeObject:[presenter valueForKey:Name] forKey:@"Name"];
}
XCTAssertTrue([[presenter Name] isEqualToString:@"Name"], "Name");
NSLog(@"%@ end", self.name);
}
Почему вы неправильно литья 'presenter' для' NSMutableData'? Почему у вас есть цикл 'for' на одном' NSString'? – rmaddy
BTW - самые бесполезные слова, которые может использовать программист, это «он не работает». Пожалуйста, четко объясните, каким образом код не делает то, что вы ожидаете. Вы получаете предупреждения или ошибки компилятора? Создается ли приложение, но происходит сбой? Он работает, но делает что-то другое, чем ожидалось? Для любого из них дайте четкие, конкретные сведения о проблеме. – rmaddy
Извините, но это то, что я получаю при запуске тестового примера: Тип выражения коллекции «NSString *» может не отвечать на «countByEnumeratingWithState: objects: count: – Walee