2016-01-09 65 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"); 
} 

與目前執行的問題是事實,你沒有訪問創建格式,從而它很難測試它。將對象創建和業務邏輯拆分爲單獨的單元對於您的代碼也很有用,因爲它可以讓您的單元短小並專注於一項任務。

相關問題