0

問題:ユニットテストの実行中にNSBundleから取得する(null)と、実行時に有効なオブジェクトが返されます。

私が何をした ?

私は同様の問題、アップルの開発者および他のオンラインリソースでこの問題についてSOを検索しましたが、運がありませんでした。

私はSOの質問から解決策を試しました。OCUnit&NSBundleNSBundlepathForResourceはnilを返します

私がオンラインで行ったすべてのソリューションは、実行時とテストのバンドルが異なることを指摘しています。

それらのすべては持っていることをお勧めします

[NSBundle bundleForClass: [self class]];

それ以外の

[NSBundle mainBundle];    

質問:上記の修正がセッターインジェクションによるものなのか、ソースファイル自体によるものなのかわかりません。?メソッドをテストする他の方法はありますgetIpAdressか?

コード

(null)を返すクラス、

// iRNetworkingObject.m

@implementation iRNetworkingObject

-(NSString*) getIpAdress {
     NSDictionary *infoDict = [[NSBundle bundleForClass:[self class]] infoDictionary];
     NSString *lookUpAdress = [infoDict objectForKey:@"LookUpIpAdress"];
     return lookUpAdress;
}
@end

テストクラス

- (void) testGetIpAdress {

    iRNetworkingObject* networkingObject = [[iRNetworkingObject alloc] init];
    NSString* testCase = @"192.168.2.1";
    NSString* encondedString = [networkingObject getIpAdress]];

    STAssertTrue([testCase isEqualToString:encondedString], @"Not equal");
}
4

1 に答える 1

2

bundleForClass:テスト バンドルの代わりにアプリケーション バンドルを確実に取得するために、テスト コードでは重要です。本番コードでそれを行う必要はありません。

キー@"LookUpIpAdress"のスペルが間違っています。それが問題ですか?

于 2013-03-19T03:37:02.360 に答える