Xcode iOS - 使用相同资源的多个测试失败 - 如何使用1个资源进行多次测试?

时间:2017-04-20 09:24:07

标签: ios xcode unit-testing

我有一套测试,我逐渐编写测试视频文件的不同功能。 (我在我的资源包中包含一个测试视频。)当逐个运行这些测试时,它们会成功。但是当从Xcode Test Navigator一起运行它们时,它们开始产生负载错误,例如"The requested URL was not found on this server."(使用AVAssetImageGenerator - 类似的消息"无法找到此URL"是为其他人生成的文件加载操作。)

我可以摆脱这些错误,只需复制我的测试视频并为每个测试用例使用不同的文件,就可以完美地运行所有测试。我目前正在使用NSFileManagerAVAsset类来加载来自文件网址的视频,我最好的猜测是,测试正在并行运行,我的测试资源视频文件正在被锁定由系统在一个线程使用时。

虽然我的测试资源文件夹的大小正在快速增长,但这种单一文件的测试方案并不适用于视频!

在多个测试中使用一个测试资源的任何好方法?

编辑:我的测试跨越了不同的测试文件,我在所有情况下获取文件网址(始终有效),例如

testVideoURL = [[NSBundle bundleForClass:[self class]] URLForResource:@"TestVideo3" withExtension:@"MOV"];

1 个答案:

答案 0 :(得分:0)

您是否尝试过创建辅助方法来加载文件,然后将其视为伪单例?

一些非常简单的零检查就足够了,例如:

-(VideoClass *)loadMyVideo {
    if (_myVideo == nil) {
        VideoClass *loadedVideo;
        //  load video logic here
        _myVideo = loadedVideo;
    }
    return _myVideo;
}

我最近在自己的测试中遇到了类似的问题,导航效果很好,记得在tearDown中分配属性并在setUp中分配属性。

我非常怀疑测试是并行运行的,除非你明确地设置它们这样做,因为默认情况下它们在主线程上同步运行。 但是,如果您对此感到担心,那么您也可以尝试在if语句中使用dispatch_once初始化。