如何测试我的 NSNumberFormatter 只初始化一次?
Posted
技术标签:
【中文标题】如何测试我的 NSNumberFormatter 只初始化一次?【英文标题】:How do I test that my NSNumberFormatter is only initialized once? 【发布时间】:2016-01-09 17:00:28 【问题描述】:我为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
【问题讨论】:
使用一次调度。这样,数字格式化程序将只初始化一次。 ***.com/q/5720029/3882338 不过,这仍需要测试。 【参考方案1】:您可以将格式化程序分配提取到另一个方法中,然后断言:
+ (NSNumberFormatter*)amountFormatter;
- (void)testOnlyOneFormatterIsCreated
NSNumberFormatter *formatter1 = [NSDecimalNumber amountFormatter];
NSNumberFormatter *formatter2 = [NSDecimalNumber amountFormatter];
XCTAssertEqual(formatter1, formatter2, "Expected only one formatter to be created");
您当前实现的问题在于您无法访问创建的格式化程序,因此很难对其进行测试。将对象创建和业务逻辑拆分为单独的单元对您的代码也有好处,因为它可以使您的单元简短并只专注于一项任务。
【讨论】:
以上是关于如何测试我的 NSNumberFormatter 只初始化一次?的主要内容,如果未能解决你的问题,请参考以下文章
为啥我的 NSNumberFormatter 对象为输入 1.0 打印“2”?
NSNumberFormatter numberFromString 为货币样式格式化程序返回 0