加载测试图像以进行单元测试

时间:2012-08-13 20:35:57

标签: objective-c unit-testing

我正在为一个加载图像并进行一些颜色处理的类编写测试。 图像加载

    UIImage* image = [UIImage imageNamed:imageName];

如果我运行该应用程序一切正常,图像按预期加载。我添加了一个单元测试,该测试应使用在测试期间加载的特定测试图像。如果我运行测试夹具,则不会加载图像。到目前为止我读到的是imageNamed方法总是从app bundle的资源文件夹加载。如何将其更改为我的测试包?

6 个答案:

答案 0 :(得分:6)

在Swift 3.0中你会这样做:

tblCart

其中tblcart是您的测试类的名称✌️

答案 1 :(得分:5)

为此制作了一个方便的类别。

image = [UIImage testImageNamed:@"image.png"];

如:

@interface BundleLocator : NSObject
@end

@interface UIImage (Test)
+(UIImage*)testImageNamed:(NSString*) imageName;
@end

@implementation BundleLocator
@end

@implementation UIImage (Test)
+(UIImage*)testImageNamed:(NSString*) imageName
{
    NSBundle *bundle = [NSBundle bundleForClass:[BundleLocator class]];
    NSString *imagePath = [bundle pathForResource:imageName.stringByDeletingPathExtension ofType:imageName.pathExtension];
    return [UIImage imageWithContentsOfFile:imagePath];
}
@end

答案 2 :(得分:3)

如果您的意思是测试包中只有一个想要在测试中使用的图像(即测试夹具),请查看this answer

您可以使用[NSBundle bundleForClass:[SomeClassThatExistsInTheAppOnly class]]定制该答案,以获取实际应用的NSBundle。这使您可以专门从测试包中定位应用程序包。

答案 3 :(得分:2)

你也可以使用它(在Swift中):

let bundle = NSBundle(forClass: MyClass.self)
let img = UIImage(named: "TestImage", inBundle: bundle, compatibleWithTraitCollection: nil)

答案 4 :(得分:0)

好吧,一个选择是将该资源添加到您的测试(app)。

就个人而言,我只使用路径(initWithContentsOfFile:),数据(initWithData:)等。这可能涉及引入一些参数 - 但在许多情况下这是,因为该参数可用于测试更多输入图像文件(如果您愿意),同时不会更改/克隆/重新打包应用程序

答案 5 :(得分:0)

更改应用包:

让bundle = Bundle(标识符:" org.cocoapods.ACSPLib")

让photo = UIImage(名称:nameofThePhoto,in:bundle,compatibleWith:nil)

捆绑标识符

bundle identifier for pod