我为NSDecimalNumber
创建了一个类别,我在其中NSString
并返回NSDecimalNumber
。我在一些视图控制器中使用它,并希望创建一个NSNumberFormatter
的全局实例。我认为这有效,但我不知道如何测试它。例如,每次分配NSNumberFormatter
实例时,我都想要NSLog。我该怎么做?
#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 :(得分:4)
您可以将格式化程序分配提取到另一个方法中,并断言:
+ (NSNumberFormatter*)amountFormatter;
- (void)testOnlyOneFormatterIsCreated {
NSNumberFormatter *formatter1 = [NSDecimalNumber amountFormatter];
NSNumberFormatter *formatter2 = [NSDecimalNumber amountFormatter];
XCTAssertEqual(formatter1, formatter2, "Expected only one formatter to be created");
}
您当前实现的问题是您无法访问创建的格式化程序,因此很难对其进行测试。将对象创建和业务逻辑拆分为单独的单元也有利于您的代码,因为它可以使您的单元保持简短并仅专注于一项任务。