Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
テスト実行時に 不要な初期化コードを実行しないようにする
Search
kNagadou
February 22, 2018
Programming
1.6k
4
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
テスト実行時に 不要な初期化コードを実行しないようにする
potatotips#48での発表スライドです
kNagadou
February 22, 2018
More Decks by kNagadou
See All by kNagadou
勇気を出して、Appleにバグレポートを出してみませんか?
knagadou
0
1.2k
Musicアプリのトランジションを再現する
knagadou
3
2.7k
iPhoneX対応とScrollViewのcontentInset
knagadou
1
740
Other Decks in Programming
See All in Programming
TypeScript+Orvalで実現する型安全かつ堅牢でスケーラブルなマルチチャネル通知基盤 / TSKaigi Night talks ~after conference~
d0riven
0
310
3Dシーンの圧縮
fadis
1
680
IBM Bobを活用したレガシーアプリの最新化
oniak3ibm
PRO
1
180
さぁV100、メモリをお食べ・・・
nilpe
0
130
タクシーアプリ『GO』の バックエンド開発のおける AI利活用と若者のすべて
pyama86
3
1.9k
例外の正しい扱い方 そのエラー try-catchして大丈夫?
jinwatanabe
0
130
Lessons from Spec-Driven Development
simas
PRO
0
150
気づいたらRubyで100作品 ー クリエイティブコーディングが生活の一部になるまで / 100 Ruby Sketches Later: How Creative Coding Became Part of My Life
chobishiba
3
550
並列実装の現場、2ヶ月間実務でAIを使い倒したAIもPCも私も限界が近い
ming_ayami
0
110
Language Server 使ってる? 〜VSCode と Zed の場合〜 / Are you using a Language Server? ~For VS Code and Zed~
handlename
0
770
PHPで使える日時の表現と、その知り方 #frontend_phpcon_do
o0h
PRO
0
200
AI時代のUIはどこへ行く?その2!
yusukebe
19
6.8k
Featured
See All Featured
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
65
55k
Joys of Absence: A Defence of Solitary Play
codingconduct
1
390
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
1
2.7k
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
200
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
30 Presentation Tips
portentint
PRO
1
320
Between Models and Reality
mayunak
4
330
Un-Boring Meetings
codingconduct
0
310
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
2.9k
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
160
Producing Creativity
orderedlist
PRO
348
40k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
55k
Transcript
ςετ࣮ߦ࣌ʹ ෆཁͳॳظԽίʔυΛ࣮ߦ͠ ͳ͍Α͏ʹ͢Δ ,":"$ٕज़෦ ,B[VNBTB/"("%0 QPUBUPUJQT
ࣗݾհ w ,B[VNBTB/"("%0 w ,":"$ೖࣾϲ݄ w ʢʣ/1$+ϑΟδʔΫ ϊʔϏεΫϥεग़༧ఆ w 5XJUUFS!L[NTOHE
ϓϥίϨ ϓϥίϨ8FEEJOH IUUQTQMBDPMFXFEEJOH %SFTTZCZϓϥίϨ IUUQTESFTTZQMBDPMFXFEEJOH
ΞϓϦىಈ࣌ʹॳظσʔλΛߏங͢Δ͜ͱ͕͋Δ ྫʣςετ༻ͷϢʔβάϧʔϓ ڥݻ༗ͷม ֎෦4%,ͷηοτΞοϓ ͳͲ
ᶃΞϓϦͷॳظԽॲཧͳͲͰ.PEFMͷৼΔ͍͕มΘΒͳ͍Α͏ʹ͍ͨ͠ ॳظԽॲཧɺ"QQ%FMFHBUFʹॻ͘͜ͱ͕ଟ͍ɻ ςετ࣌"QQ%FMFHBUFͷॲཧΛ࣮ߦ͠ͳ͍Α͏ʹ͍ͨ͠
ᶄ7JFX7JFX$POUSPMMFSͷΠϯελϯεෆཁ σϑΥϧτͩͱɺ6OJUςετ࣌6*͕ϩʔυ͞ΕΔ .BJO*OUFSGBDFͷϩʔυίʔυͰͰ͖Δ
ᶅςετ༻ͷίʔυ͕"QQ%FMFHBUFʹଘࡏͯ͠͠·͏ let isRunningTest = ProcessInfo.processInfo.environment["XCInjectBundleInto"] != nil if isRunningTest {
// ςετ࣌ͷॳظԽॲཧ } else { // ϓϩμΫγϣϯ༻ͷॳظԽॲཧ } ςετ༻ͷॳظԽॲཧผͷॴʹ͚͍ͨ
ςετ͕࣮ߦ͞Ε͍ͯΔ͔ఆ ςετ࣮ߦ࣌5FTU"QQ%FMFHBUFΛ༻ɺͦ͏͡Όͳ͍ͳΒ "QQ%FMFHBUFΛ༻ .BJO*OUFSGBDFͷϩʔυɺϓϩμΫγϣϯ༻ͷ"QQ%FMFHBUFͰ ॲཧ ɹʢςετ༻ͷ5FTU"QQ%FMFHBUFɺ.BJO*OUFSGBDFΛϩʔυ͠ͳ͍ʣ ͱ͢Εྑͦ͞͏ɻ
<NBJOTXJGU> 5FTU"QQ%FMFHBUFͱ"QQ%FMFHBUFΛ͍͚ΒΕΔΑ͏ʹɺςετ࣮ߦఆΛ NBJOؔʹॻ͘ɻ 4XJGUͷNBJOؔͲ͜ʹ͋Δͷ͔ʁ ࣮ɺ҉తʹએݴ͞Ε͓ͯΓɺNBJOTXJGUΛϓϩδΣΫτʹՃ͢Δ͜ͱͰ NBJOؔతͳॲཧΛॻ͚Δɻ
import UIKit let isRunningTest = ProcessInfo.processInfo.environment["XCInjectBundleInto"] != nil let appDelegateClass
= isRunningTest ? NSStringFromClass(TestAppDelegate.self) : NSStringFromClass(AppDelegate.self) let args = UnsafeMutableRawPointer(CommandLine.unsafeArgv).bindMemory(to: UnsafeMutablePointer<Int8>.self, capacity: Int(CommandLine.argc)) UIApplicationMain(CommandLine.argc, args, nil, appDelegateClass) <NBJOTXJGU> NBJOTXJGUΛϓϩδΣΫτʹՃɻ ςετ࣮ߦதͳΒɺ5FTU"QQ%FMFHBUFΛUIApplicationMain(_,_,_,_)ͷҾ ʹ͢ॲཧΛॻ͘ɻ
<5FTU"QQ%FMFHBUFTXJGU> 5FTU"QQ%FMFHBUFɺͱΓ͋͑ͣॲཧͳ͠Ͱ0, import UIKit class TestAppDelegate: UIResponder, UIApplicationDelegate { }
<"QQ%FMFHBUFTXJGU> .BJO*OUFSGBDFΛϩʔυ͢ΔίʔυΛॻ͘ let storyboard = UIStoryboard(name: "Main", bundle: nil)
window = UIWindow() window?.rootViewController = storyboard.instantiateInitialViewController() window?.makeKeyAndVisible()
1SPKFDU(FOFSBM%FQMPZNFOU*OGPʹ͋Δ.BJO *OUFSGBDFΛϒϥϯΫʢۭനʣʹ͢Δɻ ·ͨɺJOGPQMJTUͷ6*.BJO4USPZCPBSE'JMFΛআɻ
<"QQ%FMFHBUFTXJGU> Εͣʹɺ"QQ%FMFHBUFTXJGU͔Β@UIApplicationMainΛআɻ ʢUIApplicationMain(_,_,_,_)ΛݺΜͰɺσϦήʔτΫϥεΛ͢ "UUSJCVUFʣ // @UIApplicationMain class AppDelegate: UIResponder,
UIApplicationDelegate {
·ͱΊ NBJOTXJGUͰςετ࣮ߦதͷఆΛͯ͠ɺ5FTU"QQ%FMFHBUFΛ͏ ςετ࣮ߦ࣌.BJO*OUFSGBDFϩʔυͨ͘͠ͳ͍ͷͰɺJOGPQMJTU͔Β আ ˠϓϩμΫγϣϯ༻ͷ"QQ%FMFHBUFͰϩʔυ͢ΔΑ͏ʹ͢Δ
͋Γ͕ͱ͏͍͟͝·ͨ͠
ςετ࣮ߦதͷఆํ๏ʹ͍ͭͯ let isRunningTest = ProcessInfo.processInfo.environment["XCInjectBundleInto"] ! = nil //
or let isRunningTest = NSClassFromString("XCTestCase") != nil
ͲͪΒͰఆͨ͠ํ͕Α͍͔ʁ • ProcessInfo.processInfo.environment[“XCInjectBundleInto"] xcodebuild test࣮ߦ࣌ʹඞͣଘࡏ͢Δڥม • NSClassFromString(“XCTestCase") XCTestCase͕ଘࡏ͠ͳ͍ڥͩͱɺਖ਼͘͠ఆͰ͖ͳ͍
ςετ͕ಋೖ͞Ε͍ͯͳ͍ΞϓϦΛϦϑΝΫλ ˣ .PEFMͷ6OJUςετΛॻ͘ ˣ ෆཁͳॳظԽίʔυΛ࣮ߦ͠ͳ͍Α͏ʹͨ͠
ࢀߟ <>'BLF"QQ%FMFHBUF'PS6OJU5FTUJOH*O4XJGU IUUQTNBSDPTBOUBEFWDPNGBLFBQQEFMFHBUFVOJUUFTUJOHTXJGU <>)PXUP&BTJMZ4XJUDI:PVS"QQ%FMFHBUFGPS5FTUJOH IUUQTRVBMJUZDPEJOHPSHBQQEFMFHBUFGPSUFTUT <>9DPEFͰςετ࣮ߦ࣌ʹ"QQ%FMFHBUFΛ͚Δ IUUQTRJJUBDPNLFZJUFNTEBCCFBFDE