spectaとは
- TDD / BDD用の軽量テストフレームワーク
- Cocoapodsのガイドで推奨されていた
install
- pod lib createコマンドでテストフレームワークを選ぶところがあるのでspectaを選べばインストールされる
- そうじゃなくても、PodfileにSpectaを追加すればよし
テストを書く
SpectaのReadmeを参考にする
- before/afterの設定もできる
- beforeEachの中にテストを書いてみたけど、Test navigatorに反映されてないから書かないほうがいい...?
- OHHTTPStubsを使ってスタブのテストを書いてみた例
- PodfileにOHHTTPStubsも追加している
#import <Specta/Specta.h>
#import <OHHTTPStubs/OHHTTPStubs.h>
SpecBegin(StubTest)
beforeAll(^{
NSDictionary *responseDic = @{@"key":@"value"};
NSData *jsonResponse = [NSJSONSerialization dataWithJSONObject:responseDic options:0 error:nil];
//CreateStub
// Objective-C
[OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) {
return [request.URL.absoluteString isEqualToString:@"https://example.com/2013-09-01/classes/Test"];
} withStubResponse:^OHHTTPStubsResponse*(NSURLRequest *request) {
return [OHHTTPStubsResponse responseWithData:jsonResponse
statusCode:200
headers:@{@"Content-Type":@"application/json"}];
}];
});
describe(@"OHHTTPStubs", ^{
it(@"should return stub response", ^{
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"https://example.com/2013-09-01/classes/Test"]];
NSHTTPURLResponse *response = nil;
NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil];
expect([NSJSONSerialization JSONObjectWithData:responseData
options:NSJSONReadingAllowFragments
error:nil]
).to.equal(@{@"key":@"value"});
});
});
afterAll(^{
[OHHTTPStubs removeAllStubs];
});
SpecEnd
- 値を検証するmatcherにはexpectaを使っている
- 利用できるmatcherの種類はReadmeで確認できる
テストを実行
XcodeのProduct / Testを実行すると、テストが実行されます。
Test Navigaterの表示がリセットされない
- Xcode6.2での話
- プロジェクトを再度開かないと削除したテストケースはクリアされない。。。?
テストクラス用テンプレートを作る
- テンプレートをXcodeに追加してくれるリポジトリがあった
- Specta-Templates-Xcode
- git cloneして、テンプレートファイルを編集
vim Specta\ Spec.xctemplate/___FILEBASENAME___.m
import文を書き換えたのですが、
別に変更しなくてもいいかもしれないです。。。
//
// ___FILENAME___
// ___PROJECTNAME___
//
// Created by ___FULLUSERNAME___ on ___DATE___.
// Copyright ___YEAR___ ___ORGANIZATIONNAME___. All rights reserved.
//
//import文をちょっと変更
#import <Specta/Specta.h>
#import "___VARIABLE_testedClass___.h"
SpecBegin(___VARIABLE_testedClass___)
describe(@"___VARIABLE_testedClass___", ^{
beforeAll(^{
});
beforeEach(^{
});
it(@"", ^{
});
afterEach(^{
});
afterAll(^{
});
});
SpecEnd
- ./install-templates.shを実行
新規ファイル作成時にSpectaを選択すると、
テスト対象のクラス名を入力してSpecファイルを作成できるようになる