code coverage for xcode 5 & ios 7

17
Xcode 5 & iOS 7 でも コードカバレッジとか 取りたい! @tokorom Wednesday, December 11, 13

Upload: yuta-tokoro

Post on 22-Nov-2014

3.081 views

Category:

Technology


4 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Code Coverage for Xcode 5 & iOS 7

Xcode 5 & iOS 7でも

コードカバレッジとか取りたい!

@tokorom

Wednesday, December 11, 13

Page 2: Code Coverage for Xcode 5 & iOS 7

これのiOS 7版

Wednesday, December 11, 13

Page 3: Code Coverage for Xcode 5 & iOS 7

Xcode 4.x 以前のテスト実行

xcodebuild \ -project $(PROJECT) \ -target $(TEST_TARGET) \ -sdk iphonesimulator \ -configuration Debug \ TEST_AFTER_BUILD=YES \ TEST_HOST=

Wednesday, December 11, 13

Page 4: Code Coverage for Xcode 5 & iOS 7

Xcode 5 以降のテスト実行

xcodebuild test \ -scheme $(SCHEME) \ -destination $(DESTINATION)

Wednesday, December 11, 13

Page 5: Code Coverage for Xcode 5 & iOS 7

Xcode 5 の xcodebuild は大幅パワーアップ!

Wednesday, December 11, 13

Page 6: Code Coverage for Xcode 5 & iOS 7

コードカバレッジ

Wednesday, December 11, 13

Page 7: Code Coverage for Xcode 5 & iOS 7

xxx.gcno & xxx.gcda

GCC_INSTRUMENT_PROGRAM_FLOW_ARCS=YES \GCC_GENERATE_TEST_COVERAGE_FILES=YES

Wednesday, December 11, 13

Page 8: Code Coverage for Xcode 5 & iOS 7

iOS 6 ではうまくいくのに

Wednesday, December 11, 13

Page 9: Code Coverage for Xcode 5 & iOS 7

iOS 7 では

xxx.gcda が出ない!?

Wednesday, December 11, 13

Page 10: Code Coverage for Xcode 5 & iOS 7

自分でこれを呼ばないとダメらしい

extern void __gcov_flush(void); __gcov_flush();

Wednesday, December 11, 13

Page 11: Code Coverage for Xcode 5 & iOS 7

いつ呼ぶの?

Wednesday, December 11, 13

Page 12: Code Coverage for Xcode 5 & iOS 7

今...ではなくてテストが全部

実行し終わった後

Wednesday, December 11, 13

Page 13: Code Coverage for Xcode 5 & iOS 7

XCTestObserver

Wednesday, December 11, 13

Page 14: Code Coverage for Xcode 5 & iOS 7

XCTestObserver

NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];[defaults setObject:@"XCTestLog,XXXObserver" forKey:XCTestObserverClassKey];[defaults synchronize];

Wednesday, December 11, 13

Page 15: Code Coverage for Xcode 5 & iOS 7

XCTestObserver@interface TKRGcovFluserTestObserver : XCTestObserver@end

@implementation XXXObserver - (void)stopObserving{ [super stopObserving]; extern void __gcov_flush(void); __gcov_flush();}

@end

Wednesday, December 11, 13

Page 16: Code Coverage for Xcode 5 & iOS 7

現状の悩み

■ 普通にやると .gcno しか出ない

■ __gcov_flush() すると .gcda しか出ない

■ 今は、普通にテスト走らせて、 次に__gcov_flush()付きで走らせてる(無駄)

Wednesday, December 11, 13

Page 17: Code Coverage for Xcode 5 & iOS 7

動いているサンプル

http://github.com/tokorom/ReplaceImageCategoryForXcode

Wednesday, December 11, 13