0

NSTimerクラスAにあるパラメーターを持つメソッドがあります

-(void)demoMethod:(NSTimer *)timer{
    //Do something!
}

これで、メソッドのテスト ケースをカバーできました。

-(void)testDemoMethodPassNilTimer{

    //Created class Instance for the ClassA

    ClassA *testA = [[ClassA alloc]init];

    //[test testDemoMethod:nil];

    STAssertThrows([testA testDemoMethod:nil],@"should throw exception");

}

-(void)testDemoMethodPassTimer{

    ClassA *testA = [[ClassA alloc]init];
    STAssertNoThrows([testA testDemoMethod:??????]);
}

NSTimerテスト Case メソッドの Objectのパラメーターを渡す適切な方法は何testDemoMethodPassTimerですか?

4

2 に答える 2

0

また、パラメーターを NSTimer に解析する必要もありました。それで、私はカテゴリクラスの作成を思いついたので、それが役に立ちました。

NSTimer を介して Category クラスを作成する手順は次のとおりです。

  1. プロジェクトを右クリックし、「新しいファイル」を選択します
  2. Cacoa Touch > Objective-C カテゴリ > 次へ
  3. カテゴリを指定: 追加 & カテゴリをオン: NSTimer
  4. .h ファイルで placeId のプロパティを作成するだけです
  5. .m で @dynamic を使用して合成し、セッター、ゲッターを作成します
  6. その .h ファイルをファイルにインポートします。

NSTimer+additions.h ファイル

#import <Foundation/Foundation.h>

@interface NSTimer (additions)

     @property(nonatomic,retain)    NSString  *additionalTag;

@end

NSTimer+additions.m ファイル

#import "NSTimer+additions.h"
#import <objc/runtime.h>

NSString *const additionalTagKey = @"additionalTagKey";

@implementation NSTimer (additions)
@dynamic additionalTag;

- (void)setAdditionalTag:(NSString*)aObject
{
    objc_setAssociatedObject(self, additionalTagKey, aObject, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
- (NSString*)additionalTag
{
    return objc_getAssociatedObject(self, additionalTagKey);
}

@end

NSTimer#import "NSTimer+additions.h"を使用してクラスで

パラメータを NSTimer に渡す

-(void)testDemoMethodPassTimer{

    NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1.0f
                              target:self
                              selector:@selector(timerTick:)
                              userInfo:nil
                              repeats:YES];
    timer.additionalTag = @"parameter passed to timer";

    ClassA *testA = [[ClassA alloc]init];
    STAssertNoThrows([testA testDemoMethod:timer]);
}

タイマーからパラメータを取得する

-(void)demoMethod:(NSTimer *)timer{
    NSLog(@"My Parameter: %@",timer.additionalTag);
}

多くの手順が含まれますが、うまくいけば少しは役に立ちます。:)

于 2013-02-28T09:42:23.940 に答える
0

実際のタイマー オブジェクトを指定しますが、実行ループでスケジュールしないでください。

于 2013-02-28T07:02:03.807 に答える