Kiwi上手体验

作者: nimomeng | 来源:发表于2016-11-06 22:52 被阅读647次

    听说Kiwi,是来自于我在进行模块化构建的时候,执行 pod lib create xxxPods
    的时候会有一个问题:

    Which testing frameworks will you use? [ Specta / Kiwi / None ]
    

    Kiwi

    Kiwi是一套以BDD为思想的可读性良好的测试框架,其底层由XCTest框架实现,与XCode结合度很高。

    BDD

    BDD提倡的是通过将测试语句转换为类似自然语言的描述,开发人员可以使用更符合大众语言的习惯来书写测试,这样不论在项目交接/交付,或者之后自己修改时,都可以顺利很多。如果说作为开发者的我们日常工作是写代码,那么BDD其实就是在讲故事。一个典型的BDD的测试用例包活完整的三段式上下文,测试大多可以翻译为Given..When..Then
    的格式,读起来轻松惬意。

    Demo

    describe(@"My initial tests", ^{
    
      context(@"will pass", ^{
    
          it(@"can do maths", ^{
            [[@1 should] beLessThan:@23];
          });
        
          it(@"can read", ^{
              [[@"team" shouldNot] containString:@"I"];
          });  
      });
    });
    

    四种常用的测试场景

    Sequence Logic

    此种情况直接通过equal语法,或者should not + equal语法完成,简单明快

    it(@"can do maths", ^{
              [[vc.name should] equal:@"nimo"];
          });
    

    Notification

    此种方式利用出发notification的方式,来测试是否真的执行到了Notification的方式来执行。

    it(@"can hook notification", ^{
              [[@"Notify" should] bePosted];
              
              NSNotification *myNotification = [NSNotification notificationWithName:@"Notify"
                                                                             object:nil];
              [[NSNotificationCenter defaultCenter] postNotification:myNotification];
          });
    

    Block场景和Thread场景

    这两种场景的测试方法一致,都是待其执行后看运算是否执行,通过expectFutureValue来进行查看:

    it(@"can hook thread", ^{
              [vc changeNameByThread];
              [[expectFutureValue(vc.name) shouldEventually] equal:@"kiki"];
          });
          
          it(@"can hook blocks",^{
              __weak NimoViewController *wVC = vc;
              [vc changeNameWithBlock:^(NSString *name) {
                  wVC.name = name;
              }];
              [[expectFutureValue(vc.name) shouldEventually] equal:@"nimo for Block Function"];
          });
    

    优点

    首先,和CocoaPods结合紧密,官方创建Pods后直接支持生成Kiwi的测试项目;
    其次,由于其BDD的特性,语法可读性很强;
    最后,由于是基于XCTest来开发的,对XCode的支持很好,直接通过XCode进行测试回归或调试即可。

    和Jenkins的结合

    Todo
    不过因为起支持XCode级别的调试和运行,所以即便无法Jenkins也不是很有所谓了。

    更详细的Kiwi介绍:
    本来想写一篇关于Kiwi的详细介绍,发现喵神已经有专著了,所以我就不重复造轮子了:
    TDD的iOS开发初步以及Kiwi使用入门
    Kiwi 使用进阶 Mock, Stub, 参数捕获和异步测试

    相关文章

      网友评论

        本文标题:Kiwi上手体验

        本文链接:https://www.haomeiwen.com/subject/counuttx.html