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为测试用例方法传递 Object 参数的正确方法应该是什么testDemoMethodPassTimer

4

2 回答 2

0

给它一个实际的计时器对象,但不要将它安排在运行循环中。

于 2013-02-28T07:02:03.807 回答
0

我也需要将参数解析为 NSTimer。所以我想出了创建类别类,这对我有帮助。

以下是在 NSTimer 上创建 Category 类的步骤。

  1. 右键单击项目并选择“新建文件”
  2. Cacoa Touch > Objective-C 分类 > Next
  3. 给类别:添加和类别:NSTimer
  4. 在 .h 文件中只需创建 placeId 的属性
  5. 在 .m 中使用 @dynamic 合成它并创建 setter、getter
  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

现在#import "NSTimer+additions.h"在你的课堂上使用 NSTimer

将参数传递给 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 回答