SlideShare a Scribd company logo
1 of 39
Download to read offline
ユニットテスト初学者が
Kiwi framework
非同期テストで失敗した
ヤフー vs クラスメソッド Buttle 6

 

Yuichi Adachi

!
2014 Feb 25

Copyright © Classmethod, Inc.

1
Self Introduction
!
!

・iOSアプリ開発&エンジニア歴もう少しで二年
!

・去年12月にクラスメソッドに入社しました
!

・テスト歴は二ヶ月くらいです

Copyright © Classmethod, Inc.

2
今日話すこと
!

・Unit Test の利点
!

・Kiwiの特徴
!

・非同期テストでの失敗

Copyright © Classmethod, Inc.

3
Unit Testの利点

Copyright © Classmethod, Inc.

4
Unit Testの利点
・ヘッダのコメント等では把握しきれない挙動
 も把握できる。

Copyright © Classmethod, Inc.

5
Unit Testの利点
・ヘッダのコメント等では把握しきれない挙動
 も把握できる。
!

・画面表示をせず、 +Uのみで挙動が期待する
 内容かチェックできる。

Copyright © Classmethod, Inc.

6
Unit Testの利点
・ヘッダのコメント等では把握しきれない挙動
 も把握できる。
!

・画面表示をせず、 +Uのみで挙動が期待する
 内容かチェックできる。
!

・副作用を含まないコードに貪欲になれる。
Copyright © Classmethod, Inc.

7
Kiwiの特徴

Copyright © Classmethod, Inc.

8
Kiwiの特徴
!

・XCTest, OCUnitのようにテストメソッド名
 を英語で逐一考えなくていい
!
!

Copyright © Classmethod, Inc.

9
Kiwiの特徴
!

・XCTest, OCUnitのようにテストメソッド名
 を英語で逐一考えなくていい
!

・テストケースを対象ごと、文脈ごとに区切れる
!

Copyright © Classmethod, Inc.

10
!

サーバーと切り離して
非同期ユニットテスト

Copyright © Classmethod, Inc.

11
!

テストコードが
実行されない

Copyright © Classmethod, Inc.

12
!

ソースURL:
http://github.com/UsrNameu1/KiwiTestStudy

Copyright © Classmethod, Inc.

13
テスト概略

Copyright © Classmethod, Inc.

14
テスト概略

Copyright © Classmethod, Inc.

この部分を
15
テスト
テスト概略

Copyright © Classmethod, Inc.

この部分を
16
テスト

stub:withBlock:
で置き換え
ブロックハンドラメソッド
の挙動を決定
+ (void)stub:(SEL)aSelector 	
withBlock:(id (^)(NSArray *))block

Copyright © Classmethod, Inc.

17
ブロックハンドラメソッド
の挙動を決定
+ (void)stub:(SEL)aSelector 	
withBlock:(id (^)(NSArray *))block

返したいメソッドのセレクタを挿入

Copyright © Classmethod, Inc.

18
ブロックハンドラメソッド
の挙動を決定
+ (void)stub:(SEL)aSelector 	
withBlock:(id (^)(NSArray *))block

メソッド呼び出しの
引数、返り値を決め打ち
ブロック引数はNSArray
Copyright © Classmethod, Inc.

19

で取得できる
YADWebServiceSpec.m
[NSURLConnection	
stub:@selector(sendAsynchronousRequest:queue:completionHandler:)	
withBlock:^id(NSArray *params) {	
void (^handler)(NSURLResponse *, NSData *, NSError *) =	
params[2];	
handler(nil, data, nil);	
return nil;	
}];	
});	
it(@"ブロックハンドラから正常に値が帰ってくる", ^{
[webService 	
fetchDataWithCompletion:^(NSDictionary *response, NSError *err) {	
[[response should] beNonNil];	
[[response[@"id"] should] equal:object[@"id"]];	
[[response[@"name"] should] equal:object[@"name"]];
}];	
});

Copyright © Classmethod, Inc.

20
YADWebServiceSpec.m
[NSURLConnection	
stub:@selector(sendAsynchronousRequest:queue:completionHandler:)	
withBlock:^id(NSArray *params) {	
void (^handler)(NSURLResponse *, NSData *, NSError *) =	
params[2];	
handler(nil, data, nil);	
return nil;	
}];	

Comments for
describe, context, it

});	
it(@"ブロックハンドラから正常に値が帰ってくる", ^{

[webService 	
fetchDataWithCompletion:^(NSDictionary *response, NSError *err) {	
[[response should] beNonNil];	
[[response[@"id"] should] equal:object[@"id"]];	
[[response[@"name"] should] equal:object[@"name"]];
}];	

テスト
コード

});

Copyright © Classmethod, Inc.

21
YADWebServiceSpec.m
[NSURLConnection	
stub:@selector(sendAsynchronousRequest:queue:completionHandler:)	
withBlock:^id(NSArray *params) {	
void (^handler)(NSURLResponse *, NSData *, NSError *) =	
params[2];	
handler(nil, data, nil);	
return nil;	
}];	

stub:withBlock:
Comments for
で置き換え
describe, context, it

});	
it(@"ブロックハンドラから正常に値が帰ってくる", ^{

[webService 	
fetchDataWithCompletion:^(NSDictionary *response, NSError *err) {	
[[response should] beNonNil];	
[[response[@"id"] should] equal:object[@"id"]];	
[[response[@"name"] should] equal:object[@"name"]];
}];	

テスト
コード

});

Copyright © Classmethod, Inc.

22
Copyright © Classmethod, Inc.

23
BreakPointで
ハンドラ内部が走っているか確認

Copyright © Classmethod, Inc.

24
YADWebServiceSpec.m
[NSURLConnection	
stub:@selector(sendAsynchronousRequest:queue:completionHandler:)	
withBlock:^id(NSArray *params) {	
void (^handler)(NSURLResponse *, NSData *, NSError *) =	
params[2];	
!
handler(nil, data, nil);	
return nil;	
!
}];	
});	
it(@"ブロックハンドラから正常に値が帰ってくる", ^{

テストに対するコメント

[webService 	
fetchDataWithCompletion:^(NSDictionary *response, NSError *err) {	
[[response should] beNonNil];	
[[response[@"id"] should] equal:object[@"id"]];	
[[response[@"name"] should] equal:object[@"name"]];
}];	

使い分けてますか?

});

Copyright © Classmethod, Inc.

25
YADWebServiceSpec.m
[NSURLConnection	
stub:@selector(sendAsynchronousRequest:queue:completionHandler:)	
withBlock:^id(NSArray *params) {	
void (^handler)(NSURLResponse *, NSData *, NSError *) =	
params[2];	
!
handler(nil, data, nil);	
return nil;	
!
}];	
});	
it(@"ブロックハンドラから正常に値が帰ってくる", ^{

テストに対するコメント

[webService 	
fetchDataWithCompletion:^(NSDictionary *response, NSError *err) {	
[[response should] beNonNil];	
[[response[@"id"] should] equal:object[@"id"]];	
[[response[@"name"] should] equal:object[@"name"]];
}];	

使い分けてますか?

});

Copyright © Classmethod, Inc.

26
実行しない!

Copyright © Classmethod, Inc.

27
!

Kiwi非同期ブロックハンドラ
テストの注意点

Copyright © Classmethod, Inc.

28
!

Kiwi非同期ブロックハンドラ
テストの注意点
・ブロック内で結果を取得、ブロックの後で確認
!

Copyright © Classmethod, Inc.

29
!

Kiwi非同期ブロックハンドラ
テストの注意点
・ブロック内で結果を取得、ブロックの後で確認
!

・expectFutureValue shouldEventually

Copyright © Classmethod, Inc.

30
it(@"ブロックハンドラから正常に値が帰ってくる", ^{
[webService 	
fetchDataWithCompletion:^(NSDictionary *response, NSError *err) {	
[[response should] beNonNil];	
[[response[@"id"] should] equal:object[@"id"]];	
[[response[@"name"] should] equal:object[@"name"]];
}];	

Comments for
describe, context, it

});

Copyright © Classmethod, Inc.

31
it(@"ブロックハンドラから正常に値が帰ってくる", ^{
[webService 	
fetchDataWithCompletion:^(NSDictionary *response, NSError *err) {	
[[response should] beNonNil];	
[[response[@"id"] should] equal:object[@"id"]];	
[[response[@"name"] should] equal:object[@"name"]];
}];	

Comments for
describe, context, it

});
it(@"ブロックハンドラから正常に値が帰ってくる", ^{	
__block NSDictionary *res;	
[webService 	
fetchDataWithCompletion:^(NSDictionary *response, NSError *err) {	
res = response;
	
}];	
[[expectFutureValue(res) shouldEventually] beNonNil];	
[[expectFutureValue(res[@"id"]) shouldEventually] 	
equal:object[@"id"]];	
[[expectFutureValue(res[@"name"]) shouldEventually] 	
equal:object[@"name"]];
	
});
Copyright © Classmethod, Inc.

32
it(@"ブロックハンドラから正常に値が帰ってくる", ^{
[webService 	
fetchDataWithCompletion:^(NSDictionary *response, NSError *err) {	
[[response should] beNonNil];	
[[response[@"id"] should] equal:object[@"id"]];	
[[response[@"name"] should] equal:object[@"name"]];
}];	

Comments for
describe, context, it

});
it(@"ブロックハンドラから正常に値が帰ってくる", ^{	
__block NSDictionary *res;	
[webService 	
fetchDataWithCompletion:^(NSDictionary *response, NSError *err) {	
res = response;
	
}];	
[[expectFutureValue(res) shouldEventually] beNonNil];	
[[expectFutureValue(res[@"id"]) shouldEventually] 	
equal:object[@"id"]];	
[[expectFutureValue(res[@"name"]) shouldEventually] 	
equal:object[@"name"]];
	
});
Copyright © Classmethod, Inc.

33
it(@"ブロックハンドラから正常に値が帰ってくる", ^{
[webService 	
fetchDataWithCompletion:^(NSDictionary *response, NSError *err) {	
[[response should] beNonNil];	
[[response[@"id"] should] equal:object[@"id"]];	
[[response[@"name"] should] equal:object[@"name"]];
}];	

ぶ

});
it(@"ブロックハンドラから正常に値が帰ってくる", ^{	
__block NSDictionary *res;	
[webService 	
fetchDataWithCompletion:^(NSDictionary *response, NSError *err) {	
res = response;
	
}];	
[[expectFutureValue(res) shouldEventually] beNonNil];	
!
[[expectFutureValue(res[@"id"]) shouldEventually] 	
equal:object[@"id"]];	
[[expectFutureValue(res[@"name"]) shouldEventually] 	
equal:object[@"name"]];
	

ブロック内で結果を取得、
ブロックの後で確認

});
Copyright © Classmethod, Inc.

34
it(@"ブロックハンドラから正常に値が帰ってくる", ^{
[webService 	
fetchDataWithCompletion:^(NSDictionary *response, NSError *err) {	
[[response should] beNonNil];	
[[response[@"id"] should] equal:object[@"id"]];	
[[response[@"name"] should] equal:object[@"name"]];
}];	

Comments for
describe, context, it

});
it(@"ブロックハンドラから正常に値が帰ってくる", ^{	
__block NSDictionary *res;	
[webService 	
fetchDataWithCompletion:^(NSDictionary *response, NSError *err) {	
res = response;
	
}];	
[[expectFutureValue(res) shouldEventually] beNonNil];	
[[expectFutureValue(res[@"id"]) shouldEventually] 	
equal:object[@"id"]];	
[[expectFutureValue(res[@"name"]) shouldEventually] 	
equal:object[@"name"]];
	

expectFutureValue
shouldEventually

});
Copyright © Classmethod, Inc.

35
Copyright © Classmethod, Inc.

36
実行される!

Copyright © Classmethod, Inc.

37
References
!
!
・Asynchronous Testing - allending/Kiwi Wiki
last edited by Dave Meehan, cited 2014 Feb 09
 Available from :
https://github.com/allending/Kiwi/wiki/Asynchronous-Testing

Copyright © Classmethod, Inc.

38
ユニットテスト初学者がKiwiFramework非同期テストで失敗した

More Related Content

What's hot

reg-suitとQA Wolfを活用したVisual Regression Test
reg-suitとQA Wolfを活用したVisual Regression Testreg-suitとQA Wolfを活用したVisual Regression Test
reg-suitとQA Wolfを活用したVisual Regression TestKazuyuki Tsuzisaki
 
C# から java へのプログラム移植で体験したtddの効果は?
C# から java へのプログラム移植で体験したtddの効果は?C# から java へのプログラム移植で体験したtddの効果は?
C# から java へのプログラム移植で体験したtddの効果は?Shinichi Hirauchi
 
【STAC2017】テスト自動化システム 成長記
【STAC2017】テスト自動化システム 成長記【STAC2017】テスト自動化システム 成長記
【STAC2017】テスト自動化システム 成長記友隆 浅黄
 
最近の単体テスト
最近の単体テスト最近の単体テスト
最近の単体テストKen Morishita
 
Mackerelではじめる お手軽サーバー監視
Mackerelではじめる お手軽サーバー監視Mackerelではじめる お手軽サーバー監視
Mackerelではじめる お手軽サーバー監視Hiroyuki Ohnaka
 
ぼくのかんがえた iOSテスト戦略
ぼくのかんがえた iOSテスト戦略ぼくのかんがえた iOSテスト戦略
ぼくのかんがえた iOSテスト戦略Naoki Umehara
 
テスティングフレームワークに入門してみた - Swift編
テスティングフレームワークに入門してみた - Swift編テスティングフレームワークに入門してみた - Swift編
テスティングフレームワークに入門してみた - Swift編Hisakuni Fujimoto
 
メタな感じのプログラミング(プロ生 + わんくま 071118)
メタな感じのプログラミング(プロ生 + わんくま 071118)メタな感じのプログラミング(プロ生 + わんくま 071118)
メタな感じのプログラミング(プロ生 + わんくま 071118)Tatsuya Ishikawa
 
第4回勉強会 単体テストのすすめ
第4回勉強会 単体テストのすすめ第4回勉強会 単体テストのすすめ
第4回勉強会 単体テストのすすめhakoika-itwg
 
20131201 テスト自動化カンファレンスLT「激しいUI変更との戦い」
20131201 テスト自動化カンファレンスLT「激しいUI変更との戦い」20131201 テスト自動化カンファレンスLT「激しいUI変更との戦い」
20131201 テスト自動化カンファレンスLT「激しいUI変更との戦い」Hiroko Tamagawa
 
テストとの上手な付き合い方
テストとの上手な付き合い方テストとの上手な付き合い方
テストとの上手な付き合い方Akira Suenami
 
Java SE 9の紹介: モジュール・システムを中心に
Java SE 9の紹介: モジュール・システムを中心にJava SE 9の紹介: モジュール・システムを中心に
Java SE 9の紹介: モジュール・システムを中心にTaku Miyakawa
 
システムテスト自動化標準ガイド 5章発表資料
システムテスト自動化標準ガイド 5章発表資料システムテスト自動化標準ガイド 5章発表資料
システムテスト自動化標準ガイド 5章発表資料Masatoshi Itoh
 
テスト自動化読書会 第3章 20150523
テスト自動化読書会 第3章 20150523テスト自動化読書会 第3章 20150523
テスト自動化読書会 第3章 20150523dnoguchi
 
【Agile Conference tokyo 2011】 継続的フィードバック
【Agile Conference tokyo 2011】 継続的フィードバック【Agile Conference tokyo 2011】 継続的フィードバック
【Agile Conference tokyo 2011】 継続的フィードバック智治 長沢
 

What's hot (17)

reg-suitとQA Wolfを活用したVisual Regression Test
reg-suitとQA Wolfを活用したVisual Regression Testreg-suitとQA Wolfを活用したVisual Regression Test
reg-suitとQA Wolfを活用したVisual Regression Test
 
C# から java へのプログラム移植で体験したtddの効果は?
C# から java へのプログラム移植で体験したtddの効果は?C# から java へのプログラム移植で体験したtddの効果は?
C# から java へのプログラム移植で体験したtddの効果は?
 
Sue445 Style TDD #atest_hack
Sue445 Style TDD #atest_hackSue445 Style TDD #atest_hack
Sue445 Style TDD #atest_hack
 
CLRH_120414_WFTDD
CLRH_120414_WFTDDCLRH_120414_WFTDD
CLRH_120414_WFTDD
 
【STAC2017】テスト自動化システム 成長記
【STAC2017】テスト自動化システム 成長記【STAC2017】テスト自動化システム 成長記
【STAC2017】テスト自動化システム 成長記
 
最近の単体テスト
最近の単体テスト最近の単体テスト
最近の単体テスト
 
Mackerelではじめる お手軽サーバー監視
Mackerelではじめる お手軽サーバー監視Mackerelではじめる お手軽サーバー監視
Mackerelではじめる お手軽サーバー監視
 
ぼくのかんがえた iOSテスト戦略
ぼくのかんがえた iOSテスト戦略ぼくのかんがえた iOSテスト戦略
ぼくのかんがえた iOSテスト戦略
 
テスティングフレームワークに入門してみた - Swift編
テスティングフレームワークに入門してみた - Swift編テスティングフレームワークに入門してみた - Swift編
テスティングフレームワークに入門してみた - Swift編
 
メタな感じのプログラミング(プロ生 + わんくま 071118)
メタな感じのプログラミング(プロ生 + わんくま 071118)メタな感じのプログラミング(プロ生 + わんくま 071118)
メタな感じのプログラミング(プロ生 + わんくま 071118)
 
第4回勉強会 単体テストのすすめ
第4回勉強会 単体テストのすすめ第4回勉強会 単体テストのすすめ
第4回勉強会 単体テストのすすめ
 
20131201 テスト自動化カンファレンスLT「激しいUI変更との戦い」
20131201 テスト自動化カンファレンスLT「激しいUI変更との戦い」20131201 テスト自動化カンファレンスLT「激しいUI変更との戦い」
20131201 テスト自動化カンファレンスLT「激しいUI変更との戦い」
 
テストとの上手な付き合い方
テストとの上手な付き合い方テストとの上手な付き合い方
テストとの上手な付き合い方
 
Java SE 9の紹介: モジュール・システムを中心に
Java SE 9の紹介: モジュール・システムを中心にJava SE 9の紹介: モジュール・システムを中心に
Java SE 9の紹介: モジュール・システムを中心に
 
システムテスト自動化標準ガイド 5章発表資料
システムテスト自動化標準ガイド 5章発表資料システムテスト自動化標準ガイド 5章発表資料
システムテスト自動化標準ガイド 5章発表資料
 
テスト自動化読書会 第3章 20150523
テスト自動化読書会 第3章 20150523テスト自動化読書会 第3章 20150523
テスト自動化読書会 第3章 20150523
 
【Agile Conference tokyo 2011】 継続的フィードバック
【Agile Conference tokyo 2011】 継続的フィードバック【Agile Conference tokyo 2011】 継続的フィードバック
【Agile Conference tokyo 2011】 継続的フィードバック
 

Viewers also liked

”iOSアプリ開発の先に何があるのか” ヤフー VS クラスメソッド iOS炎の7番勝負 #7
”iOSアプリ開発の先に何があるのか” ヤフー VS クラスメソッド iOS炎の7番勝負 #7”iOSアプリ開発の先に何があるのか” ヤフー VS クラスメソッド iOS炎の7番勝負 #7
”iOSアプリ開発の先に何があるのか” ヤフー VS クラスメソッド iOS炎の7番勝負 #7Takeshi Fukasawa
 
Yahoo vs ClassMethod_battle5_iBeacon
Yahoo vs ClassMethod_battle5_iBeaconYahoo vs ClassMethod_battle5_iBeacon
Yahoo vs ClassMethod_battle5_iBeaconYasuhisa Arakawa
 
Xcodeプラグインで快適な開発ライフを
Xcodeプラグインで快適な開発ライフをXcodeプラグインで快適な開発ライフを
Xcodeプラグインで快適な開発ライフをYuki Hirai
 
Xcode 5のAsset Catalogにまつわる今すぐ使えるTips集
Xcode 5のAsset Catalogにまつわる今すぐ使えるTips集Xcode 5のAsset Catalogにまつわる今すぐ使えるTips集
Xcode 5のAsset Catalogにまつわる今すぐ使えるTips集yuki0211s
 
"アプリデザインはじめの一歩" ヤフー VS クラスメソッド iOS炎の7番勝負 #4 #yxcm
"アプリデザインはじめの一歩" ヤフー VS クラスメソッド iOS炎の7番勝負 #4 #yxcm"アプリデザインはじめの一歩" ヤフー VS クラスメソッド iOS炎の7番勝負 #4 #yxcm
"アプリデザインはじめの一歩" ヤフー VS クラスメソッド iOS炎の7番勝負 #4 #yxcmShingo Hiraya
 
iOS アプリのメンテナンス性を高めるための基本的な考え方
iOS アプリのメンテナンス性を高めるための基本的な考え方iOS アプリのメンテナンス性を高めるための基本的な考え方
iOS アプリのメンテナンス性を高めるための基本的な考え方kakegawa-atsushi
 
Yahoo vs classmethod-introduction
Yahoo vs classmethod-introductionYahoo vs classmethod-introduction
Yahoo vs classmethod-introductionRikitake Oohashi
 
Plannahのチーム開発とdeploy gateの紹介
Plannahのチーム開発とdeploy gateの紹介Plannahのチーム開発とdeploy gateの紹介
Plannahのチーム開発とdeploy gateの紹介Kenji Kinukawa
 
1人でも頑張れる!Retty式開発環境
1人でも頑張れる!Retty式開発環境1人でも頑張れる!Retty式開発環境
1人でも頑張れる!Retty式開発環境Yoichiro Sakurai
 
Vasily i os-20140403
Vasily i os-20140403Vasily i os-20140403
Vasily i os-20140403Yusuke Arai
 
チームを加速させるRetty式開発術
チームを加速させるRetty式開発術チームを加速させるRetty式開発術
チームを加速させるRetty式開発術Yoichiro Sakurai
 
Plannahプロジェクトの開発環境とdeploy gateの紹介
Plannahプロジェクトの開発環境とdeploy gateの紹介Plannahプロジェクトの開発環境とdeploy gateの紹介
Plannahプロジェクトの開発環境とdeploy gateの紹介Kenji Kinukawa
 
Xcodeを便利に使って爆速開発する #yxcm
Xcodeを便利に使って爆速開発する #yxcm Xcodeを便利に使って爆速開発する #yxcm
Xcodeを便利に使って爆速開発する #yxcm Hiramatsu Ryosuke
 

Viewers also liked (13)

”iOSアプリ開発の先に何があるのか” ヤフー VS クラスメソッド iOS炎の7番勝負 #7
”iOSアプリ開発の先に何があるのか” ヤフー VS クラスメソッド iOS炎の7番勝負 #7”iOSアプリ開発の先に何があるのか” ヤフー VS クラスメソッド iOS炎の7番勝負 #7
”iOSアプリ開発の先に何があるのか” ヤフー VS クラスメソッド iOS炎の7番勝負 #7
 
Yahoo vs ClassMethod_battle5_iBeacon
Yahoo vs ClassMethod_battle5_iBeaconYahoo vs ClassMethod_battle5_iBeacon
Yahoo vs ClassMethod_battle5_iBeacon
 
Xcodeプラグインで快適な開発ライフを
Xcodeプラグインで快適な開発ライフをXcodeプラグインで快適な開発ライフを
Xcodeプラグインで快適な開発ライフを
 
Xcode 5のAsset Catalogにまつわる今すぐ使えるTips集
Xcode 5のAsset Catalogにまつわる今すぐ使えるTips集Xcode 5のAsset Catalogにまつわる今すぐ使えるTips集
Xcode 5のAsset Catalogにまつわる今すぐ使えるTips集
 
"アプリデザインはじめの一歩" ヤフー VS クラスメソッド iOS炎の7番勝負 #4 #yxcm
"アプリデザインはじめの一歩" ヤフー VS クラスメソッド iOS炎の7番勝負 #4 #yxcm"アプリデザインはじめの一歩" ヤフー VS クラスメソッド iOS炎の7番勝負 #4 #yxcm
"アプリデザインはじめの一歩" ヤフー VS クラスメソッド iOS炎の7番勝負 #4 #yxcm
 
iOS アプリのメンテナンス性を高めるための基本的な考え方
iOS アプリのメンテナンス性を高めるための基本的な考え方iOS アプリのメンテナンス性を高めるための基本的な考え方
iOS アプリのメンテナンス性を高めるための基本的な考え方
 
Yahoo vs classmethod-introduction
Yahoo vs classmethod-introductionYahoo vs classmethod-introduction
Yahoo vs classmethod-introduction
 
Plannahのチーム開発とdeploy gateの紹介
Plannahのチーム開発とdeploy gateの紹介Plannahのチーム開発とdeploy gateの紹介
Plannahのチーム開発とdeploy gateの紹介
 
1人でも頑張れる!Retty式開発環境
1人でも頑張れる!Retty式開発環境1人でも頑張れる!Retty式開発環境
1人でも頑張れる!Retty式開発環境
 
Vasily i os-20140403
Vasily i os-20140403Vasily i os-20140403
Vasily i os-20140403
 
チームを加速させるRetty式開発術
チームを加速させるRetty式開発術チームを加速させるRetty式開発術
チームを加速させるRetty式開発術
 
Plannahプロジェクトの開発環境とdeploy gateの紹介
Plannahプロジェクトの開発環境とdeploy gateの紹介Plannahプロジェクトの開発環境とdeploy gateの紹介
Plannahプロジェクトの開発環境とdeploy gateの紹介
 
Xcodeを便利に使って爆速開発する #yxcm
Xcodeを便利に使って爆速開発する #yxcm Xcodeを便利に使って爆速開発する #yxcm
Xcodeを便利に使って爆速開発する #yxcm
 

Similar to ユニットテスト初学者がKiwiFramework非同期テストで失敗した

JaSST'16 Tokyo モバイルセッション
JaSST'16 Tokyo モバイルセッションJaSST'16 Tokyo モバイルセッション
JaSST'16 Tokyo モバイルセッションmirer
 
テスト初心者Androiderのためのソフトウェアテスト入門
テスト初心者Androiderのためのソフトウェアテスト入門テスト初心者Androiderのためのソフトウェアテスト入門
テスト初心者Androiderのためのソフトウェアテスト入門Satoshi Watanabe
 
単体テストをやってみた~既存サービスに単体テストを追加するチャレンジ~
単体テストをやってみた~既存サービスに単体テストを追加するチャレンジ~単体テストをやってみた~既存サービスに単体テストを追加するチャレンジ~
単体テストをやってみた~既存サービスに単体テストを追加するチャレンジ~ceres-inc
 
Test-Driven Development for [Embedded] C by James Grenning at Agile Japan 2013
Test-Driven Development for [Embedded] C by James Grenning at Agile Japan 2013Test-Driven Development for [Embedded] C by James Grenning at Agile Japan 2013
Test-Driven Development for [Embedded] C by James Grenning at Agile Japan 2013Yohei Onishi
 
ビジネス的に高価値なアジャイルテスト
ビジネス的に高価値なアジャイルテストビジネス的に高価値なアジャイルテスト
ビジネス的に高価値なアジャイルテストTsutomu Chikuba
 
JUnit実践入門 xUnitTestPatternsで学ぶユニットテスト
JUnit実践入門 xUnitTestPatternsで学ぶユニットテストJUnit実践入門 xUnitTestPatternsで学ぶユニットテスト
JUnit実践入門 xUnitTestPatternsで学ぶユニットテストShuji Watanabe
 
「最強」のチームを「造る」技術基盤 ディレクターズ・カット
「最強」のチームを「造る」技術基盤 ディレクターズ・カット「最強」のチームを「造る」技術基盤 ディレクターズ・カット
「最強」のチームを「造る」技術基盤 ディレクターズ・カットRakuten Group, Inc.
 
テストコードのリファクタリング
テストコードのリファクタリングテストコードのリファクタリング
テストコードのリファクタリングShuji Watanabe
 
#STAC2014 システムテスト自動化ハンズオン
#STAC2014 システムテスト自動化ハンズオン#STAC2014 システムテスト自動化ハンズオン
#STAC2014 システムテスト自動化ハンズオンkyon mm
 
GroovyなAndroidテスト #atest_hack
GroovyなAndroidテスト #atest_hackGroovyなAndroidテスト #atest_hack
GroovyなAndroidテスト #atest_hackTakahiro Yoshimura
 
Android ReactNative UITesting
Android ReactNative UITestingAndroid ReactNative UITesting
Android ReactNative UITestingVishal Banthia
 
レガシーと向き合い技術スタックを代謝する(ElasticBeanstalk / Vue.js)
レガシーと向き合い技術スタックを代謝する(ElasticBeanstalk / Vue.js)レガシーと向き合い技術スタックを代謝する(ElasticBeanstalk / Vue.js)
レガシーと向き合い技術スタックを代謝する(ElasticBeanstalk / Vue.js)Recruit Lifestyle Co., Ltd.
 
ゼロから始めたE2Eテスト
ゼロから始めたE2Eテストゼロから始めたE2Eテスト
ゼロから始めたE2Eテストushiboy
 
Laravelとテストについて
LaravelとテストについてLaravelとテストについて
LaravelとテストについてTakeo Noda
 
Unit testで定時帰宅!
Unit testで定時帰宅!Unit testで定時帰宅!
Unit testで定時帰宅!Funato Takashi
 
【JaSST'11 Kansai】 開発者とテスト担当者に最適なコラボレーションと効率化を!
【JaSST'11 Kansai】 開発者とテスト担当者に最適なコラボレーションと効率化を!【JaSST'11 Kansai】 開発者とテスト担当者に最適なコラボレーションと効率化を!
【JaSST'11 Kansai】 開発者とテスト担当者に最適なコラボレーションと効率化を!智治 長沢
 
iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -
iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -
iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -Toshiyuki Hirata
 
はこだてIKA 第4回勉強会 単体テスト
はこだてIKA 第4回勉強会 単体テストはこだてIKA 第4回勉強会 単体テスト
はこだてIKA 第4回勉強会 単体テストSeiji KOMATSU
 
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]David Buck
 

Similar to ユニットテスト初学者がKiwiFramework非同期テストで失敗した (20)

JaSST'16 Tokyo モバイルセッション
JaSST'16 Tokyo モバイルセッションJaSST'16 Tokyo モバイルセッション
JaSST'16 Tokyo モバイルセッション
 
テスト初心者Androiderのためのソフトウェアテスト入門
テスト初心者Androiderのためのソフトウェアテスト入門テスト初心者Androiderのためのソフトウェアテスト入門
テスト初心者Androiderのためのソフトウェアテスト入門
 
単体テストをやってみた~既存サービスに単体テストを追加するチャレンジ~
単体テストをやってみた~既存サービスに単体テストを追加するチャレンジ~単体テストをやってみた~既存サービスに単体テストを追加するチャレンジ~
単体テストをやってみた~既存サービスに単体テストを追加するチャレンジ~
 
Test-Driven Development for [Embedded] C by James Grenning at Agile Japan 2013
Test-Driven Development for [Embedded] C by James Grenning at Agile Japan 2013Test-Driven Development for [Embedded] C by James Grenning at Agile Japan 2013
Test-Driven Development for [Embedded] C by James Grenning at Agile Japan 2013
 
ビジネス的に高価値なアジャイルテスト
ビジネス的に高価値なアジャイルテストビジネス的に高価値なアジャイルテスト
ビジネス的に高価値なアジャイルテスト
 
JUnit実践入門 xUnitTestPatternsで学ぶユニットテスト
JUnit実践入門 xUnitTestPatternsで学ぶユニットテストJUnit実践入門 xUnitTestPatternsで学ぶユニットテスト
JUnit実践入門 xUnitTestPatternsで学ぶユニットテスト
 
「最強」のチームを「造る」技術基盤 ディレクターズ・カット
「最強」のチームを「造る」技術基盤 ディレクターズ・カット「最強」のチームを「造る」技術基盤 ディレクターズ・カット
「最強」のチームを「造る」技術基盤 ディレクターズ・カット
 
テストコードのリファクタリング
テストコードのリファクタリングテストコードのリファクタリング
テストコードのリファクタリング
 
快適・簡単・安心なアプリE2Eテストの実行環境 #stac2017
快適・簡単・安心なアプリE2Eテストの実行環境 #stac2017快適・簡単・安心なアプリE2Eテストの実行環境 #stac2017
快適・簡単・安心なアプリE2Eテストの実行環境 #stac2017
 
#STAC2014 システムテスト自動化ハンズオン
#STAC2014 システムテスト自動化ハンズオン#STAC2014 システムテスト自動化ハンズオン
#STAC2014 システムテスト自動化ハンズオン
 
GroovyなAndroidテスト #atest_hack
GroovyなAndroidテスト #atest_hackGroovyなAndroidテスト #atest_hack
GroovyなAndroidテスト #atest_hack
 
Android ReactNative UITesting
Android ReactNative UITestingAndroid ReactNative UITesting
Android ReactNative UITesting
 
レガシーと向き合い技術スタックを代謝する(ElasticBeanstalk / Vue.js)
レガシーと向き合い技術スタックを代謝する(ElasticBeanstalk / Vue.js)レガシーと向き合い技術スタックを代謝する(ElasticBeanstalk / Vue.js)
レガシーと向き合い技術スタックを代謝する(ElasticBeanstalk / Vue.js)
 
ゼロから始めたE2Eテスト
ゼロから始めたE2Eテストゼロから始めたE2Eテスト
ゼロから始めたE2Eテスト
 
Laravelとテストについて
LaravelとテストについてLaravelとテストについて
Laravelとテストについて
 
Unit testで定時帰宅!
Unit testで定時帰宅!Unit testで定時帰宅!
Unit testで定時帰宅!
 
【JaSST'11 Kansai】 開発者とテスト担当者に最適なコラボレーションと効率化を!
【JaSST'11 Kansai】 開発者とテスト担当者に最適なコラボレーションと効率化を!【JaSST'11 Kansai】 開発者とテスト担当者に最適なコラボレーションと効率化を!
【JaSST'11 Kansai】 開発者とテスト担当者に最適なコラボレーションと効率化を!
 
iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -
iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -
iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -
 
はこだてIKA 第4回勉強会 単体テスト
はこだてIKA 第4回勉強会 単体テストはこだてIKA 第4回勉強会 単体テスト
はこだてIKA 第4回勉強会 単体テスト
 
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]
 

More from Yuichi Adachi

Seminar on Quantum Computation & Quantum Information part28
Seminar on Quantum Computation & Quantum Information part28Seminar on Quantum Computation & Quantum Information part28
Seminar on Quantum Computation & Quantum Information part28Yuichi Adachi
 
Swift2.x を Scala からみる
Swift2.x を Scala からみるSwift2.x を Scala からみる
Swift2.x を Scala からみるYuichi Adachi
 
Swift2 の新機能 Protocol Extension
Swift2 の新機能 Protocol ExtensionSwift2 の新機能 Protocol Extension
Swift2 の新機能 Protocol ExtensionYuichi Adachi
 
Seminar on Quantum Computation & Quantum Information part19
Seminar on Quantum Computation & Quantum Information part19Seminar on Quantum Computation & Quantum Information part19
Seminar on Quantum Computation & Quantum Information part19Yuichi Adachi
 
続・ゲンバのSwift
続・ゲンバのSwift続・ゲンバのSwift
続・ゲンバのSwiftYuichi Adachi
 
Seminar on Quantum Computation & Quantum Information part15
Seminar on Quantum Computation & Quantum Information part15Seminar on Quantum Computation & Quantum Information part15
Seminar on Quantum Computation & Quantum Information part15Yuichi Adachi
 
Seminar on Quantum Computation & Quantum Information part14
Seminar on Quantum Computation & Quantum Information part14Seminar on Quantum Computation & Quantum Information part14
Seminar on Quantum Computation & Quantum Information part14Yuichi Adachi
 
VIPER アーキテクチャによる iOS アプリの設計
VIPER アーキテクチャによる iOS アプリの設計VIPER アーキテクチャによる iOS アプリの設計
VIPER アーキテクチャによる iOS アプリの設計Yuichi Adachi
 
[iOS8] 新たな線形代数ライブラリ Linear Algebra
[iOS8] 新たな線形代数ライブラリ Linear Algebra[iOS8] 新たな線形代数ライブラリ Linear Algebra
[iOS8] 新たな線形代数ライブラリ Linear AlgebraYuichi Adachi
 
Swiftの新機能 Optional
Swiftの新機能 OptionalSwiftの新機能 Optional
Swiftの新機能 OptionalYuichi Adachi
 

More from Yuichi Adachi (12)

Seminar on Quantum Computation & Quantum Information part28
Seminar on Quantum Computation & Quantum Information part28Seminar on Quantum Computation & Quantum Information part28
Seminar on Quantum Computation & Quantum Information part28
 
Swift2.x を Scala からみる
Swift2.x を Scala からみるSwift2.x を Scala からみる
Swift2.x を Scala からみる
 
Swift2 の新機能 Protocol Extension
Swift2 の新機能 Protocol ExtensionSwift2 の新機能 Protocol Extension
Swift2 の新機能 Protocol Extension
 
Seminar on Quantum Computation & Quantum Information part19
Seminar on Quantum Computation & Quantum Information part19Seminar on Quantum Computation & Quantum Information part19
Seminar on Quantum Computation & Quantum Information part19
 
続・ゲンバのSwift
続・ゲンバのSwift続・ゲンバのSwift
続・ゲンバのSwift
 
Seminar on Quantum Computation & Quantum Information part15
Seminar on Quantum Computation & Quantum Information part15Seminar on Quantum Computation & Quantum Information part15
Seminar on Quantum Computation & Quantum Information part15
 
ゲンバのSwift
ゲンバのSwiftゲンバのSwift
ゲンバのSwift
 
Seminar on Quantum Computation & Quantum Information part14
Seminar on Quantum Computation & Quantum Information part14Seminar on Quantum Computation & Quantum Information part14
Seminar on Quantum Computation & Quantum Information part14
 
VIPER アーキテクチャによる iOS アプリの設計
VIPER アーキテクチャによる iOS アプリの設計VIPER アーキテクチャによる iOS アプリの設計
VIPER アーキテクチャによる iOS アプリの設計
 
[iOS8] 新たな線形代数ライブラリ Linear Algebra
[iOS8] 新たな線形代数ライブラリ Linear Algebra[iOS8] 新たな線形代数ライブラリ Linear Algebra
[iOS8] 新たな線形代数ライブラリ Linear Algebra
 
Swiftの新機能 Optional
Swiftの新機能 OptionalSwiftの新機能 Optional
Swiftの新機能 Optional
 
Applicative functor
Applicative functorApplicative functor
Applicative functor
 

Recently uploaded

CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 

Recently uploaded (9)

CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 

ユニットテスト初学者がKiwiFramework非同期テストで失敗した