Kiwi上手体验

听说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上手体验)