您好,欢迎来到时间财富网
全部需求分类
当前位置:首页 > 移动应用 > ios开发:如何编写单元测试验证程序
ios开发:如何编写单元测试验证程序
2015/10/12 15:04:27   作者:风雨考验   人气:477次  评论(0)
所属标签: IOS 

那么如何测试它是否转化成功呢?首先基于上一个网络层测试获取返回JSON格式的食物列表数据,然后调用MTLJSONAdapter类的modelsOfClass: fromJSONArray: error:方法来转化成FoodModel的数组。接下来断言数组不能为空和数组的第一个元素是FoodModel类。 

使用kiwi编写测试如下: 
Java代码 
  1. describe(@"FoodModel", ^{  
  2.   
  3.     context(@"when JSON data convert to FoodModel", ^{  
  4.         __block BOOL successful = NO;  
  5.         __block NSError *error = nil;  
  6.   
  7.         it(@"should return FoodModel array", ^{  
  8.             // get data from network  
  9.             RACSignal *result = [FoodListClient fetchFoodList];  
  10.             RACTuple *tuple = [result asynchronousFirstOrDefault:nil success:&successful error:&error];  
  11.             NSArray *foodList = tuple.first;  
  12.   
  13.             // assert that foodList can't be empty  
  14.             [[theValue(successful) should] beYes];  
  15.             [[error should] beNil];  
  16.             [[foodList shouldNot] beEmpty];  
  17.   
  18.             // assert that return FoolModel array  
  19.             NSArray *foodModelList = [MTLJSONAdapter modelsOfClass:[FoodModel class] fromJSONArray:foodList error:nil];  
  20.             [[foodModelList shouldNot] beEmpty];  
  21.             [[foodModelList[0] should] beKindOfClass:[FoodModel class]];  
  22.         });  
  23.     });  
  24. });  

ViewModel抓取数据 

完成抓取网络数据和转化JSON数据为Model后,我使用FoodViewModel来抓取网络数据和完成数据映射,设计与实现如下: 
Java代码 
  1. @interface FoodViewModel : RVMViewModel  
  2.   
  3. /* 
  4.  @brief FoodModel列表 
  5.  */  
  6. @property (strong, nonatomic, readonly) NSArray *foodModelList;  
  7.   
  8. @end  

Java代码 
  1. @implementation FoodViewModel  
  2. - (instancetype)init  
  3. {  
  4.     self = [super init];  
  5.   
  6.     if (!self) {  
  7.         return nil;  
  8.     }  
  9.   
  10.     RAC(self, foodModelList) = [[FoodListClient fetchFoodList] map:^id(RACTuple * tuple) {  
  11.         return [MTLJSONAdapter modelsOfClass:[FoodModel class] fromJSONArray:tuple.first error:nil];  
  12.     }];  
  13.   
  14.     return self;  
  15. }  
  16. @end  

Controller加载数据 

最后FoodListViewController负责构建view hierarchy和加载数据: 
Java代码 
  1. #pragma mark - Lifecycle  
  2. - (void)viewDidLoad  
  3. {  
  4.     [super viewDidLoad];  
  5.     // setup title name and background color  
  6.     self.title = @"食物列表";  
  7.     self.view.backgroundColor = [UIColor whiteColor];  
  8.     // build view hierarchy  
  9.     [self buildViewHierarchy];  
  10.     // when finish fetching data and reload table view  
  11.     [RACObserve(self.foodViewModel, foodModelList) subscribeNext:^(NSArray* items) {  
  12.         self.foodListDataSource.items = items;  
  13.         [self.tableView reloadData];  
  14.     }];  
  15. }  

总结 

编写单元测试是程序员的一项基本技能,如果能够设计好的测试用例并编写测试验证结果,不仅保证代码的质量,而且有利于以后重构加一层保护层。一旦修改了代码之后,如果运行单元测试,并没有通过的话,说明你在重构过程中引入新的Bug。如果通过了单元测试,说明并没有引入新的Bug。 


时间财富网为广大企业、商家、个人,提供平面设计、装修设计、建筑设计、起名改名、策划文案、网站建设、营销推广等服务。若您有类似需要,请点击立即发布项目

另,时间财富网上也有着各式各样的任务,无论您是拥有技能的专业人士,还是技术小白。都能在时间财富网上找到您能参与的项目。点击进入悬赏大厅

无论你有什么疑难杂症,威客们都能一一为您解决,点击进入:问答平台