【问题标题】:Adding an Image to ALAssetsLibrary using XCTest使用 XCTest 将图像添加到 ALAssetsLibrary
【发布时间】:2014-04-27 17:43:51
【问题描述】:

我有一个广泛使用照片的应用程序,对它们进行了多项操作:

  • 调整大小
  • 裁剪
  • 元数据提取

我编写的大多数方法都在 AlAssets 上运行,因此我想编写我的测试(我正在使用新的 XCTest 框架)也可以在 ALAssets 上运行。

我在项目中包含了一组照片作为测试的输入,我计划在 [XCTest +setUp] 上将每张图片添加到库中,并在 [XCTest +tearDown] 上删除它们。

一切都很顺利 - 虽然,编译 XCTest 是一场噩梦 - 但是对于我拨打的每一个电话:

- (void)writeImageDataToSavedPhotosAlbum:metadata:completionBlock:

完成块永远不会被调用,也不会将图像添加到库中,如果稍后我枚举那里的所有照片,我只会看到库中以前可用的照片。

为了确保完成块运行,我使用信号量控制应用程序流,如下所示:

UIImage *image = [self imageWithName:@"DSC_0002" extension:@"JPG"];
NSData *dataJpeg = UIImageJPEGRepresentation(image, 0.9f);
ALAssetsLibrary* library = [[ALAssetsLibrary alloc] init];
dispatch_semaphore_t sem = dispatch_semaphore_create(0);
[library writeImageDataToSavedPhotosAlbum:dataJpeg metadata:nil completionBlock:^(NSURL *assetURL, NSError *error) {
        // control will never run this code
        NSLog(@"Asset URL %@",[assetURL absoluteString]);
        dispatch_semaphore_signal(sem);
    }];
dispatch_semaphore_wait(sem, DISPATCH_TIME_FOREVER);

有什么想法吗?有没有可能在 XCTest 上的库上写?

提前致谢, 泽

【问题讨论】:

    标签: ios objective-c alassetslibrary alasset xctest


    【解决方案1】:

    您可以通过触发 runloop 来阻止测试方法在块执行之前退出,直到满足条件。这是一个例子:

    - (void)testAssetLibraryOperation
    {
        NSURL *assetURL; // get this however you want
        ALAssetsLibrary *lib =  [ALAssetsLibrary new];
    
        __block BOOL waiting = YES;
    
        [lib assetForURL:assetURL resultBlock:^(ALAsset *asset) {
    
            // perform tests on asset
            XCTAssertNotNil(asset, @"asset should not be nil");
    
            // stop waiting
            waiting = NO;
    
        } failureBlock:nil];
    
    
        // wait until BOOL says NO
        while (waiting) {
            [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]];
        }
    }
    

    如果操作时间过长,您可能需要添加逻辑以停止等待。

    您也可以在 GitHub 上查看这些资源以获取更多信息和灵感

    【讨论】:

      猜你喜欢
      • 2011-09-14
      • 2015-01-13
      • 2014-11-17
      • 1970-01-01
      • 2017-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多