我正在尝试使用测试驱动程序和新的XCTest框架编写一个iOS应用程序。我的一个方法从互联网上检索一个文件(给定一个NSURL对象),并将其存储在用户的文档中。该方法的签名类似于:
- (void) fetchAndStoreImage:(NSURL *)imageUrl
我正在尝试为这个方法编写测试,使其在没有连接到互联网的情况下不会失败。我的方法(取自前面的question)是使用指向本地文件系统中的图像的NSURL调用该方法。
当创建一个启用了单元测试的新项目时,tests目录有一个名为“Supporting Files”的子目录。我想这就是我的测试图像应该放到的地方。我的问题是,如何才能获得指向此目录中图像的NSURL对象,因为我不希望测试图像与应用程序捆绑在一起。任何帮助都是非常感谢的。
发布于 2014-11-14 02:49:11
为了补充正确的答案,下面是如何为您的单元测试/支持文件中的文件获取filePath的示例:
NSString *filePath = [[[NSBundle bundleForClass:[self class]] resourcePath] stringByAppendingPathComponent:@"YourFileName.json"];
XCTAssertNotNil(filePath);
这可能会对某些人有用。
发布于 2019-06-20 23:38:14
基于接受答案的Swift
版本:
let url = URL(fileURLWithPath: Bundle(for: type(of: self)).path(forResource: "my", ofType: "json") ?? "TODO: Proper checking for file")
发布于 2016-12-19 06:46:37
我面临的问题是应用程序代码试图访问bundleIdentifier之类的主包,因为主包不是我的单元测试项目,所以它将返回nil。
在Swift 3.0.1和Objective-C中都有效的一个解决方法是在NSBundle上创建一个Objective-C类别,并将其包含在您的单元测试项目中。您不需要桥接头或其他任何东西。这个类别将被加载,现在当您的应用程序代码请求主包时,您的类别将返回单元测试包。
@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
https://stackoverflow.com/questions/19309092
复制相似问题