1

単体テストは、現時点ではバケツロードによって謙虚なパイを処理しています。BannerAdViewController クラスでテストを実行しようとしていますが、次の行に到達するとすべてが失敗します。

UITextView *buyAppTextView  = [[UITextView alloc] initWithFrame:CGRectMake(8, 2, 304, 50)];

コンソール出力は次のとおりです。

-[__NSCFType markupDescription]: unrecognized selector sent to instance 0x1bc2de0

これは、クラッシュが発生する前に到達する方法です。

-(void)setup{   
    _bannerFrame    = [self frameRectForBannerAd];
    _bannerWrapperFrame = [self frameRectForBannerWrapperFrame];

    UITextView *buyAppTextView  = [[UITextView alloc] initWithFrame:CGRectMake(8, 2, 304, 50)];
    [buyAppTextView setText:@"some text"];
    [buyAppTextView setTextColor:[UIColor blackColor]];
    [buyAppTextView setFont:[UIFont systemFontOfSize:10]];
    [buyAppTextView setAutoresizingMask:UIViewContentModeScaleAspectFit];
    [buyAppTextView setUserInteractionEnabled:NO];  

    _placeHolderBanner  = [[UIView alloc] initWithFrame:_bannerFrame];

    [_placeHolderBanner setBackgroundColor:[UIColor whiteColor]];
    [[_placeHolderBanner layer]  setBorderColor:[UIColor blackColor].CGColor];
    [[_placeHolderBanner layer] setBorderWidth:1.0];
    [_placeHolderBanner addSubview: buyAppTextView];

    [[self view] setFrame:_bannerWrapperFrame];
    [[self view] setBackgroundColor:[UIColor clearColor]];
    [[self view] addSubview: _placeHolderBanner];

    _iAdBanner  = [[ADBannerView alloc] initWithFrame:CGRectZero];

    [[self view] addSubview: _iAdBanner];
    _iAdBanner.delegate = self;
    _iAdBanner.hidden = YES;
}

buyAppTextView に関するすべてをコメントアウトすると、テストは正常に実行されます。(はい、ご参考までに、テスト リグは UIKit にリンクされています)。

ああ、テストクラスは次のようになります

#import "NorBannerAdViewTests.h"
#import "NORBannerAdViewController.h"

@implementation NorBannerAdViewTests

NORBannerAdViewController *_adViewController;

- (void)setUp{
    [super setUp];
    _adViewController = [[NORBannerAdViewController alloc] init];
}

- (void)tearDown{
    [super tearDown];
    [_adViewController release];
}

-(void) testThatFrameRectForBannerAdWrapperDoesNotReturnZero{
    CGRect receivedFrame = [_adViewController frameRectForBannerWrapperFrame];
    STAssertFalse((CGRectIsEmpty(receivedFrame)), @"receivedFrame should not be zero");
}

-(void) testThatFrameRectForBannerAdDoesNotReturnZero{
    CGRect receivedFrame = [_adViewController frameRectForBannerAd];    
    STAssertFalse((CGRectIsEmpty(receivedFrame)), @"receivedFrame should not be zero");
}

@end
4

1 に答える 1

3

大規模なグーグル検索といくつかの関連スレッドを追跡した後、私は(やや驚くべきことに)問題を解決することができました。この問題は、プロジェクトの作成時にテスト ターゲットが設定されていないことが原因で発生します。Cocos2D テンプレートの 1 つに基づいていたため、自分で追加する必要がありました。そうすることで、テストターゲットのビルド設定をアプリに接続しませんでした。

次の 2 つのフラグを test-target のビルド設定に追加する必要があり、テストが正常に実行されるようになりました。

Bundle Loader: $(BUILT_PRODUCTS_DIR)/AppName.app/AppName
Test Host: $(BUNDLE_LOADER)
于 2013-01-07T11:20:00.950 に答える