2012-08-13 66 views
7

我正在爲加載圖像並進行一些顏色處理的類寫一個測試。 圖像加載加載單元測試的測試圖像

UIImage* image = [UIImage imageNamed:imageName]; 

如果我運行的應用程序,一切都很好,並如預期的圖像加載。我添加了一個單元測試,在測試過程中應該使用特定的測試圖像加載。如果我運行測試夾具,圖像不會被加載。目前我讀到的是,imageNamed方法總是從應用程序包的資源文件夾中加載。我怎樣才能將其改變爲我的測試包?

回答

0

好,其中一個方案是向資源添加到您的測試(應用程序)。

親自,我只是使用路徑(initWithContentsOfFile:),數據(initWithData:)等。這可能涉及引入一些參數 - 但在很多情況下,這是,因爲該參數可用於測試更多輸入圖像文件(如果您喜歡),而不會更改/克隆/重新打包應用程序。

+0

但這意味着你改變用於測試目的的生產代碼,這不應該是這樣è特別不適用於使您的生活更輕鬆的框架部件;)。 – trumi 2012-08-14 19:42:59

+0

@truni所以...你試圖說服我,你正在使用'[UIImage imageNamed:]'爲你的框架的部分,這就是它應該的方式?在這種情況下使用'[UIImage imageNamed:]'是一個非常糟糕的主意,原因有幾個。如果你正在編寫一個faux-ios框架,請使用NSBundle並指定或找到你的faux-ios框架的資源目錄。然後使用除[UIImage imageNamed:]'以外的內容。然後爲您的測試變體創建另一個包並運行所有包中的測試。 – justin 2012-08-14 20:08:47

+0

,在這種情況下,它並不會改變測試代碼,它會改變你的代碼,因爲你的代碼做錯了事情。而不是一直創建新的包,您可以將這些參數傳遞給您的框架接口(公共或私有)。 – justin 2012-08-14 20:21:58

2

如果你的意思是你有,你想使用只能在測試(即測試夾具)的測試包的形象,去看看this answer

您可以根據這個問題的答案用[NSBundle bundleForClass:[SomeClassThatExistsInTheAppOnly class]]得到實際應用的一個NSBundle。這使您可以專門定位測試包中的應用程序包。

4

這是一個方便的類別。

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 
1

你也使用這個(斯威夫特):

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

在雨燕3.0,你會怎麼做:

let bundle = Bundle.init(for: NameOfYourTestClass.self) 
let image = UIImage(named: "TestImage", in: bundle, compatibleWith: nil) 

NameOfYourTestClass是你的測試班的名字✌️

0

要改變應用程序包:

設束=軟件包(標識符: 「org.cocoapods.ACSPLib」)

設相片= UIImage的(命名爲:nameofThePhoto,在:束,compatibleWith:無)

束標識符

bundle identifier for pod