我希望以正确的方式构建我的单元测试,并且想知道如何在将对象传递给方法时测试类方法
所以问题的方法(基本例子)
MyClient.m:
#import "MyClient.h"
@interface MyClient()
@property (nonatomic, strong) MyMedia *myMedia;
@end
- (void)setMedia:(MyMedia *)media {
self.MyMedia = media;
int var;
if (media && media.isLive) {
var = 1;
}
else {
var = 2;
}
}
}
所以在这个例子中我会创建两个测试,1如果media.isLive测试var是2,如果不是,则测试var是2。
希望这是有道理的
由于
答案 0 :(得分:0)
您的代码不是真正可测试的,因为您需要检查的所有内容都是私有的。虽然有很多方法可以使用运行时和测试内容来“破解”类,但您真的只想利用类的公共访问接口。所以我重写了这样的代码:
MyClient.h
@interface MyClient:NSObject
@property (nonatomic, strong) MyMedia *myMedia;
@property (nonatomic, assign, readonly) int var;
@end
MyClient.m
#import "MyClient.h"
@implementation MyClient
- (void)setMedia:(MyMedia *)media {
_MyMedia = media;
_var = media && media.isLive ? 1 : 2;
}
@end
现在让我们使用XCTest进行一些测试。
MyClientTests.m
@import XCTest;
#import "MyClient.h"
@interface MyClienTests:XCTestCase
@end
@implementation MyClientTests {
MyClient *_myCLient;
MyMedia *_media;
}
-(void) setUp {
_myClient = [[MyClient alloc] init];
_media = [[MyMedia alloc] init];
}
-(void) testMyClientMediaIsAlive {
_media.alive = YES;
_myClient.media = _media;
XCTAssertEqual(1, _myClient.var);
}
-(void) testMyClientMediaIsNotAlive {
_myClient.media = _media;
XCTAssertEqual(2, _myClient.var);
}
-(void) testMyClientNoMedia {
XCTAssertEqual(2, _myClient.var);
}
@end