Posted at

Swift界隈で話題沸騰中のテストフレームワーク Quick とは?

More than 5 years have passed since last update.


Quickとは?

QuickSwiftが発表された2日後にGithubにコミットされた、世界で一番最初のSwiftのテストフレームワークです。ビヘイビア駆動開発(BDD)指向のテストフレームワークで、SwiftObjective-Cの両方の言語に対応しています。RSpec, Specta, Ginkgoの影響を受けているそうで、記述がしやすく可読性の高いケースを表現できるのが特徴です。

modocache_Quick.jpg

ロゴもSwift調のデザインで素敵です。


開発者は?

開発者はmodocache (もどかしい)さんという日本にいらっしゃるエンジニアさんが作られています。ハンドルネームがとってもお洒落ですね。

modocache__Brian_Gesiak_.jpg


期待度は?

まだ開発開始から2週間弱ですが、とても活発に開発が行われており今後Swiftのデファクトテストフレームワークになるのではと期待が寄せらています。

また既存のObjCテストフレームワーク(※)はSwiftに対応されておらず、ファンクショナルマクロを駆使して作られているので、ファンクショナルマクロに対応していないSwiftへの対応は難しいいそうです。

(※) ObjCテストフレームワーク

- Kiwi BDD for iOS

- Specta A light-weight TDD / BDD framework for Objective-C & Cocoa

- GHUnit Test Framework for Objective-C

- XCUnit XCode default

ちなみに、modocache (もどかしい)さんはKiwiのコミッターでもあります。

QuickGithubSwift Weakly Trendingの上位に位置しており世界的にも注目を集めています。

Trending_Swift_repositories_on_GitHub_this_week.jpg


利用者は?

公開されているプロジェクトであればRxSwiftで検討されているようです。RxSwiftリアクティブプログラミングを行えるようにするライブラリです。


テストコードはどんな感じ?

READMEより拝借。

Swiftで記述すると、まるでRSpecのように流れるがごとく美しく記述できます。テストを書くのが楽しくなることうけ合いです。

// Swift

import Quick

class DolphinSpec: QuickSpec {
override func exampleGroups() {
describe("a dolphin") {
describe("its click") {
it("is loud") {
let click = Dolphin().click()
expect(click.isLoud).to.beTrue()
}

it("has a high frequency") {
let click = Dolphin().click()
expect(click.hasHighFrequency).to.beTrue()
}
}
}
}
}

// Objective-C

#import <Quick/Quick.h>

QuickSpecBegin(DolphinSpec)

qck_describe(@"a dolphin", ^{
qck_describe(@"its click", ^{
qck_it(@"is loud", ^{
Click *click = [[Dolphin new] click];
XCTAssertTrue(click.isLoud, @"expected dolphin click to be loud");
});

qck_it(@"has a high frequency", ^{
Click *click = [[Dolphin new] click];
XCTAssertTrue(click.hasHighFrequency,
@"expected dolphin click to have a high frequency");
});
});
});

Xcode上でエラー箇所や、テストの合否も確認できます。素晴らしい!

687474703a2f2f662e636c2e6c792f6974656d732f32463336326b32453366307532523070337131632f53637265656e25323053686f74253230323031342d30362d31342532306174253230382e31362e3232253230504d2e706e67.png


この連載について

今後はインストール方法や、テストの記述方法などを投稿していきたいです。