单元测试只是我似乎无法理解的东西,但我可以看到为什么它很重要,可以节省大量时间(如果你知道你正在做什么).我希望有人可以指出我正确的方向.
我有以下内容 UIViewController
QBElectricityBaseVC.h
@interface QBElectricityBaseVC : QBStateVC
@property (nonatomic, strong) QBElectricityUsage *electricityUsage;
@property (nonatomic, assign) CGFloat tabBarHeight;
- (void)updateElectricityUsage;
@end
Run Code Online (Sandbox Code Playgroud)
QBElectricityBaseVC.m
@implementation QBElectricityBaseVC
- (instancetype)init
{
self = [super init];
if (self) {
self.tabBarItem = [[UITabBarItem alloc] initWithTitle:NSLocalizedString(@"electricity_title", nil) image:nil tag:0];
}
return self;
}
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[self.notificationCenter addObserver:self selector:@selector(updateElectricityUsage)
name:kUpdatedElectricityUsageKey object:nil];
}
- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
[self.notificationCenter removeObserver:self];
}
- (void)updateElectricityUsage
{
self.electricityUsage = [self.stateManager electricityUsage];
}
- (CGFloat)tabBarHeight
{
return self.tabBarController.tabBar.frame.size.height;
}
@end …Run Code Online (Sandbox Code Playgroud) 我有以下Swift扩展 NSURL
public extension NSURL {
func getQueryItemValueForKey(key: String) -> String? {
guard let components = NSURLComponents(URL: self, resolvingAgainstBaseURL: false) else {
return nil
}
guard let queryItems = components.queryItems else { return nil }
return queryItems.filter {
$0.name == key
}.first?.value
}
}
Run Code Online (Sandbox Code Playgroud)
我正在为它编写单元测试,但我无法获得100%的代码覆盖率,因为我似乎无法NSURLComponents(URL: self, resolvingAgainstBaseURL: false)返回nil.据我所知,这需要一个格式错误的URL,但我正在努力创建一个.
我试过了:
let url = NSURL(string: "")let url = NSURL(string: "http://www.example")let url = NSURL(string: "http://www.exam ple.com")let url = NSURL(string: "http://www.example.com/?param1=äë?òú")还有一些我忘记了.我知道这可能是显而易见的事情,但此刻我迷失了.那么,如何在Swift中创建格式错误的URL?
我已经Hardware IO Tools for Xcode 7.1从Apple Developer网站下载并通过打开DMG然后双击进行安装Network Link Conditioner.prefPane。
然后,我进入“系统偏好设置”,可以看到“网络链接调节器”在那里。我可以进入,但是一旦我单击开关将其打开,整个“系统偏好设置”就会冻结。另外,我注意到我的键盘似乎停止工作了。我仍然可以执行cmd +空格键,然后在其中输入内容以搜索系统,但是例如,我无法在safari中输入URL字段。
顺便说一下,我下载了7.1版本的硬件IO工具,因为它们只有7.1或7.3版本,似乎没有7.2的版本。也许是问题所在?我目前无法升级到7.3,因为这要求我将OS X升级到10.11,但是我们公司的政策目前不允许这样做。
有人知道我该如何解决?
这可能是因为我不是计算机的管理员吗?
我要测试以下功能:
func getProduct(ean: String) -> Promise<Product> {
return Promise { fullfill, reject in
let urlString = BSConstants.BarcodeScanner.productEndpoint.stringByAppendingString(ean)
serviceClient.GET(urlString, failure: { (error) in
reject(error!)
}) { (response) in
if let json = response {
self.storeProduct(json).then ({ returnedProduct in
fullfill(returnedProduct)
}).error { returnedError in
// HANDLE ERROR
print("HANDLE ERROR")
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是我创建的模拟管理器。
class MockStoreProductProductManager: BSProductManagerSwift {
var storeProductWasCalled = false
var storeProductJSON: JSON?
let deferredPromise = Promise<Product>.pendingPromise()
override func storeProduct(json: JSON) -> Promise<Product> {
storeProductWasCalled = true
storeProductJSON = …Run Code Online (Sandbox Code Playgroud) 我的理解是,如果你打电话给你XCTFail()的一个单元测试,它将立即失败,不会继续检查剩下的断言.但是,情况似乎并非如此,至少在我目前的项目中并非如此.
我们甚至尝试过一个非常简单的单元测试.我们XCTFail()在断言之前添加了导致单元测试失败的断言,但它仍然继续并在之后运行断言检查XCTFail().
这只是我的误解还是这里出了问题?如果这是一个误解,最好的做法是告诉你的单元测试不要费心检查其他断言,因为你已经知道它们会失败?
这是使用XCTest框架的Swift单元测试.我没有给出一个代码示例,因为它似乎就是我们每个单元测试的情况,无论它们多么简单.
Xcode版本7.2.1(7C1002)