首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >带有XCTest的测试包中文件路径的NSURL

带有XCTest的测试包中文件路径的NSURL
EN

Stack Overflow用户
提问于 2013-10-11 10:03:23
回答 3查看 41K关注 0票数 80

我正在尝试使用测试驱动程序和新的XCTest框架编写一个iOS应用程序。我的一个方法从互联网上检索一个文件(给定一个NSURL对象),并将其存储在用户的文档中。该方法的签名类似于:

代码语言:javascript
复制
- (void) fetchAndStoreImage:(NSURL *)imageUrl

我正在尝试为这个方法编写测试,使其在没有连接到互联网的情况下不会失败。我的方法(取自前面的question)是使用指向本地文件系统中的图像的NSURL调用该方法。

当创建一个启用了单元测试的新项目时,tests目录有一个名为“Supporting Files”的子目录。我想这就是我的测试图像应该放到的地方。我的问题是,如何才能获得指向此目录中图像的NSURL对象,因为我不希望测试图像与应用程序捆绑在一起。任何帮助都是非常感谢的。

EN

回答 3

Stack Overflow用户

发布于 2014-11-14 02:49:11

为了补充正确的答案,下面是如何为您的单元测试/支持文件中的文件获取filePath的示例:

代码语言:javascript
复制
NSString *filePath = [[[NSBundle bundleForClass:[self class]] resourcePath] stringByAppendingPathComponent:@"YourFileName.json"];
XCTAssertNotNil(filePath);

这可能会对某些人有用。

票数 14
EN

Stack Overflow用户

发布于 2019-06-20 23:38:14

基于接受答案的Swift版本:

代码语言:javascript
复制
let url = URL(fileURLWithPath: Bundle(for: type(of: self)).path(forResource: "my", ofType: "json") ?? "TODO: Proper checking for file")
票数 2
EN

Stack Overflow用户

发布于 2016-12-19 06:46:37

我面临的问题是应用程序代码试图访问bundleIdentifier之类的主包,因为主包不是我的单元测试项目,所以它将返回nil。

在Swift 3.0.1和Objective-C中都有效的一个解决方法是在NSBundle上创建一个Objective-C类别,并将其包含在您的单元测试项目中。您不需要桥接头或其他任何东西。这个类别将被加载,现在当您的应用程序代码请求主包时,您的类别将返回单元测试包。

代码语言:javascript
复制
@interface NSBundle (MainBundle)

+(NSBundle *)mainBundle;

@end

@implementation NSBundle (Main)

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wobjc-protocol-method-implementation"
+(NSBundle *)mainBundle
{
    return [NSBundle bundleForClass:[SomeUnitTest class]];
}
#pragma clang diagnostic pop

@end
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19309092

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档