// // JXCountFormatterTests.m // AICityTests // // Feature: 003-ios-api-https // 数字格式化工具单元测试 // #import #import "JXCountFormatter.h" @interface JXCountFormatterTests : XCTestCase @end @implementation JXCountFormatterTests #pragma mark - 基础数字格式化测试 - (void)testFormatSmallNumbers { XCTAssertEqualObjects([JXCountFormatter formatCount:0], @"0"); XCTAssertEqualObjects([JXCountFormatter formatCount:1], @"1"); XCTAssertEqualObjects([JXCountFormatter formatCount:99], @"99"); XCTAssertEqualObjects([JXCountFormatter formatCount:999], @"999"); } - (void)testFormatThousandsWithK { XCTAssertEqualObjects([JXCountFormatter formatCount:1000], @"1.0k"); XCTAssertEqualObjects([JXCountFormatter formatCount:1500], @"1.5k"); XCTAssertEqualObjects([JXCountFormatter formatCount:9999], @"9.9k"); } - (void)testFormatTenThousandsWithWan { XCTAssertEqualObjects([JXCountFormatter formatCount:10000], @"1.0万"); XCTAssertEqualObjects([JXCountFormatter formatCount:15000], @"1.5万"); XCTAssertEqualObjects([JXCountFormatter formatCount:100000], @"10.0万"); XCTAssertEqualObjects([JXCountFormatter formatCount:999999], @"99.9万"); } - (void)testFormatHundredMillionsWithYi { XCTAssertEqualObjects([JXCountFormatter formatCount:100000000], @"1.0亿"); XCTAssertEqualObjects([JXCountFormatter formatCount:150000000], @"1.5亿"); XCTAssertEqualObjects([JXCountFormatter formatCount:1000000000], @"10.0亿"); } #pragma mark - 特定格式方法测试 - (void)testSpecificFormatMethods { long long count = 12345; NSString *baseFormat = [JXCountFormatter formatCount:count]; XCTAssertEqualObjects([JXCountFormatter formatLikeCount:count], baseFormat); XCTAssertEqualObjects([JXCountFormatter formatCommentCount:count], baseFormat); XCTAssertEqualObjects([JXCountFormatter formatShareCount:count], baseFormat); XCTAssertEqualObjects([JXCountFormatter formatFavoriteCount:count], baseFormat); XCTAssertEqualObjects([JXCountFormatter formatPlayCount:count], baseFormat); } #pragma mark - 真实场景测试 - (void)testRealWorldExamples { // 点赞数示例 XCTAssertEqualObjects([JXCountFormatter formatLikeCount:20000], @"2.0万"); XCTAssertEqualObjects([JXCountFormatter formatLikeCount:1568000], @"156.8万"); // 播放量示例 XCTAssertEqualObjects([JXCountFormatter formatPlayCount:120000000], @"1.2亿"); XCTAssertEqualObjects([JXCountFormatter formatPlayCount:5600], @"5.6k"); // 评论数示例 XCTAssertEqualObjects([JXCountFormatter formatCommentCount:8900], @"8.9k"); XCTAssertEqualObjects([JXCountFormatter formatCommentCount:123000], @"12.3万"); } #pragma mark - 边界值测试 - (void)testBoundaryValues { // 边界值:999 -> 1.0k XCTAssertEqualObjects([JXCountFormatter formatCount:999], @"999"); XCTAssertEqualObjects([JXCountFormatter formatCount:1000], @"1.0k"); // 边界值:9999 -> 1.0万 XCTAssertEqualObjects([JXCountFormatter formatCount:9999], @"9.9k"); XCTAssertEqualObjects([JXCountFormatter formatCount:10000], @"1.0万"); // 边界值:99999999 -> 1.0亿 XCTAssertEqualObjects([JXCountFormatter formatCount:99999999], @"9999.9万"); XCTAssertEqualObjects([JXCountFormatter formatCount:100000000], @"1.0亿"); } #pragma mark - 精度测试 - (void)testPrecision { // 测试小数点精度(四舍五入) XCTAssertEqualObjects([JXCountFormatter formatCount:12345], @"1.2万"); XCTAssertEqualObjects([JXCountFormatter formatCount:12456], @"1.2万"); XCTAssertEqualObjects([JXCountFormatter formatCount:12567], @"1.3万"); XCTAssertEqualObjects([JXCountFormatter formatCount:123456789], @"1.2亿"); XCTAssertEqualObjects([JXCountFormatter formatCount:124567890], @"1.2亿"); } #pragma mark - UI显示场景测试 - (void)testUIDisplayScenarios { // 新发布的视频 XCTAssertEqualObjects([JXCountFormatter formatPlayCount:0], @"0"); // 小众视频 XCTAssertEqualObjects([JXCountFormatter formatPlayCount:123], @"123"); // 热门视频 XCTAssertEqualObjects([JXCountFormatter formatPlayCount:5678], @"5.6k"); // 爆款视频 XCTAssertEqualObjects([JXCountFormatter formatPlayCount:123456], @"12.3万"); // 超级爆款 XCTAssertEqualObjects([JXCountFormatter formatPlayCount:123456789], @"1.2亿"); } #pragma mark - 性能测试 - (void)testPerformanceFormatCount { [self measureBlock:^{ for (int i = 0; i < 10000; i++) { [JXCountFormatter formatCount:i * 1000]; } }]; } - (void)testPerformanceFormatLargeNumbers { [self measureBlock:^{ for (int i = 0; i < 10000; i++) { [JXCountFormatter formatCount:i * 100000]; } }]; } #pragma mark - 国际化测试 - (void)testChineseFormatting { // 确保中文格式正确 NSString *result = [JXCountFormatter formatCount:10000]; XCTAssertTrue([result containsString:@"万"], @"应该包含'万'字"); result = [JXCountFormatter formatCount:100000000]; XCTAssertTrue([result containsString:@"亿"], @"应该包含'亿'字"); } - (void)testEnglishFormatting { // 确保英文格式正确 NSString *result = [JXCountFormatter formatCount:1000]; XCTAssertTrue([result containsString:@"k"], @"应该包含'k'"); } #pragma mark - 数据类型测试 - (void)testLongLongSupport { // 测试大数字支持 long long veryLargeNumber = 9999999999LL; // 99.9亿 NSString *result = [JXCountFormatter formatCount:veryLargeNumber]; XCTAssertNotNil(result); XCTAssertTrue([result containsString:@"亿"]); } - (void)testNegativeNumbers { // 虽然实际使用中不应该有负数,但测试边界情况 // 根据实现,负数可能返回"0"或保持负数格式 NSString *result = [JXCountFormatter formatCount:-1000]; XCTAssertNotNil(result); } #pragma mark - 一致性测试 - (void)testConsistencyAcrossMethods { // 确保所有格式化方法的行为一致 long long testCounts[] = {0, 999, 1000, 9999, 10000, 99999, 100000, 999999, 1000000, 100000000}; int numTests = sizeof(testCounts) / sizeof(testCounts[0]); for (int i = 0; i < numTests; i++) { long long count = testCounts[i]; NSString *baseResult = [JXCountFormatter formatCount:count]; XCTAssertEqualObjects([JXCountFormatter formatLikeCount:count], baseResult); XCTAssertEqualObjects([JXCountFormatter formatCommentCount:count], baseResult); XCTAssertEqualObjects([JXCountFormatter formatShareCount:count], baseResult); XCTAssertEqualObjects([JXCountFormatter formatFavoriteCount:count], baseResult); XCTAssertEqualObjects([JXCountFormatter formatPlayCount:count], baseResult); } } @end