小编Hod*_*son的帖子

如何对UIViewController进行单元测试 - TDD/BDD

单元测试只是我似乎无法理解的东西,但我可以看到为什么它很重要,可以节省大量时间(如果你知道你正在做什么).我希望有人可以指出我正确的方向.

我有以下内容 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)

tdd bdd unit-testing ios expecta

10
推荐指数
2
解决办法
2150
查看次数

如何在Swift中故意创建格式错误的URL

我有以下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?

nsurl ios xctest swift

9
推荐指数
1
解决办法
1576
查看次数

网络链接调节器冻结并无法启动

我已经Hardware IO Tools for Xcode 7.1从Apple Developer网站下载并通过打开DMG然后双击进行安装Network Link Conditioner.prefPane

然后,我进入“系统偏好设置”,可以看到“网络链接调节器”在那里。我可以进入,但是一旦我单击开关将其打开,整个“系统偏好设置”就会冻结。另外,我注意到我的键盘似乎停止工作了。我仍然可以执行cmd +空格键,然后在其中输入内容以搜索系统,但是例如,我无法在safari中输入URL字段。

  • 我的Mac:OS X Yosemite v10.10.5
  • 我的Xcode:v7.2.1(7C1002)

顺便说一下,我下载了7.1版本的硬件IO工具,因为它们只有7.1或7.3版本,似乎没有7.2的版本。也许是问题所在?我目前无法升级到7.3,因为这要求我将OS X升级到10.11,但是我们公司的政策目前不允许这样做。

有人知道我该如何解决?

这可能是因为我不是计算机的管理员吗?

macos xcode

6
推荐指数
1
解决办法
563
查看次数

使用PromiseKit的单元测试功能

我要测试以下功能:

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)

unit-testing ios swift promisekit

5
推荐指数
1
解决办法
1389
查看次数

调用XCTFail()后,Swift单元测试不会停止

我的理解是,如果你打电话给你XCTFail()的一个单元测试,它将立即失败,不会继续检查剩下的断言.但是,情况似乎并非如此,至少在我目前的项目中并非如此.

我们甚至尝试过一个非常简单的单元测试.我们XCTFail()在断言之前添加了导致单元测试失败的断言,但它仍然继续并在之后运行断言检查XCTFail().

这只是我的误解还是这里出了问题?如果这是一个误解,最好的做法是告诉你的单元测试不要费心检查其他断言,因为你已经知道它们会失败?

这是使用XCTest框架的Swift单元测试.我没有给出一个代码示例,因为它似乎就是我们每个单元测试的情况,无论它们多么简单.

Xcode版本7.2.1(7C1002)

xcode unit-testing xctest swift

4
推荐指数
1
解决办法
1252
查看次数

标签 统计

ios ×3

swift ×3

unit-testing ×3

xcode ×2

xctest ×2

bdd ×1

expecta ×1

macos ×1

nsurl ×1

promisekit ×1

tdd ×1