这是我下面的代码,我想对这个文件使用单元测试,而不是其他。我想知道是否可以在XCTest中对这段代码进行单元测试。
#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这是M文件:
#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:un为人所识别的选择器“
- (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);
}发布于 2015-12-11 02:32:28
您应该从阅读文件开始学习如何使用NSKeyedArchiver和NSKeyedUnarchiver。
下面是您的方法应该是什么样子:
- (void)testName
{
NSLog(@"%@ start", self.name); // self.name is the name of the test-case method.
Presenter *presenter = [[Presenter alloc] init];
presenter.Name = @"John";
NSMutableData *presenterData = [NSMutableData data];
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:presenterData];
[archiver encodeObject:presenter forKey:@"presenter"];
[archiver finishEncoding];
NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:presenterData];
Presenter *decodedPresenter = [unarchiver decodeObjectForKey:@"presenter"];
[unarchiver finishDecoding];
XCTAssertTrue([decodedPresenter.Name isEqualToString:presenter.Name], "Name");
NSLog(@"%@ end", self.name);
}但是,您可以使用工厂方法以一种简单得多的方式完成这一任务:
- (void)testName
{
NSLog(@"%@ start", self.name); // self.name is the name of the test-case method.
Presenter *presenter = [[Presenter alloc] init];
presenter.Name = @"John";
NSData *presenterData = [NSKeyedArchiver archivedDataWithRootObject:presenter];
Presenter *decodedPresenter = [NSKeyedUnarchiver unarchiveObjectWithData:presenterData];
XCTAssertTrue([decodedPresenter.Name isEqualToString:presenter.Name], "Name");
NSLog(@"%@ end", self.name);
}https://stackoverflow.com/questions/34214497
复制相似问题