2016-01-09 35 views
1

我为NSDecimalNumber创建了一个类别,其中我输入NSString并返回NSDecimalNumber。我在我的一些视图控制器中使用它,并想创建一个NSNumberFormatter的单个全局实例。我认为这有效,但我不知道如何测试它。例如,我希望NSLog每次分配一个NSNumberFormatter实例。我怎么做?如何测试我的NSNumberFormatter是否仅初始化一次?

#import "NSDecimalNumber+amountFromTextField.h" 

@implementation NSDecimalNumber (amountFromTextField) 

static NSNumberFormatter *nf; 

+(NSDecimalNumber *)amountFromTextField:(NSString *)amount { 
    @synchronized(self) { 
     if (nf == nil) { 
      nf = [[NSNumberFormatter alloc] init]; 
     } 
    } 
    NSDecimal _amount = [[nf numberFromString:amount] decimalValue]; 
    return [NSDecimalNumber decimalNumberWithDecimal:_amount]; 
} 

@end 
+0

使用调度一次。由此,数字格式化程序将仅被初始化一次。 http://stackoverflow.com/q/5720029/3882338 –

+0

虽然这仍然需要测试。 – Cristik

回答

4

您可以提取格式化分配到另一个方法,并断言上:

+ (NSNumberFormatter*)amountFormatter; 

- (void)testOnlyOneFormatterIsCreated { 
    NSNumberFormatter *formatter1 = [NSDecimalNumber amountFormatter]; 
    NSNumberFormatter *formatter2 = [NSDecimalNumber amountFormatter]; 
    XCTAssertEqual(formatter1, formatter2, "Expected only one formatter to be created"); 
} 

与目前执行的问题是事实,你没有访问创建格式,从而它很难测试它。将对象创建和业务逻辑拆分为单独的单元对于您的代码也很有用,因为它可以让您的单元短小并专注于一项任务。

相关问题