UT on Mac

筆記:在Mac Console上直接執行xcode UT

xcode 的UT 基本上是去執行"otest"這個執行檔(otest 在 /Developer/Tools/下),要執行需要兩個參數
1. -SenTest <para>
     <para>: Self, All, <testClassName/testModuleName>
     Self 跟 All 不太清楚有什麼差異,在我的case兩個都是全跑
     <testClassName/testModuleName> 也可以只給 testClassName
2. <path of your UT bundle>
    簡單來說,就是你的UT build出來的那個.octest 檔案的路徑

在順帶一提,如果想在xcode上step by step debug你的UT
1. Add a "Custom Executable" on your project
2. Set "Executable Path" to "Developer/Tools/otest"
3. Finish
4. 對你剛產生出來的Executable按右鍵,選"Get Info",修改下列資訊
    on the [General] tab
        a. Set the working dir to: Product directory
    on the [Arguments] tab, add the followings in Argument field 
        a. -SenTest Self
        b. $(BUILT_PRODUCTS_DIR)/xxx.octest
    add the following in the Environment Variable filed
        a. OBJC_DISABLE_GC  to <YES>          -->  disable GC, this depends on your project 
        b. DYLD_FRAMEWORK_PATH to <your framework path>
5. 再來就可以按右鍵 "Start xxx with Breakpoint"

重點來啦!!
如果你設完環境變數(OBJC_DISABLE_GC  DYLD_FRAMEWORK_PATH),然後直接執行
        /Developer/Tools/otest -SenTest Self <UT bundle path>
你可能會遇到類似這樣的error
2013-07-30 17:50:57.848 otest[25747:707] The test bundle at /Users/Kimi_wu/source/xxx/testAdapter.octest could not be loaded because it is built for a different architecture than the currently-running test rig (which is running as unknown).
2013-07-30 17:50:57.851 otest[25748:203] *** NSTask: Task create for path '/Users/Kimi_wu/source/xxx/testAdapter.octest/Contents/MacOS/testAdapter' failed: 22, "Invalid argument".  Terminating temporary process

網路上的大部分的說法是OCMock.framework沒有copy,所以需要在project裡做些設定,不過我們UT沒有用OCMock....,另一個狀況是,DYLD_FRAMEWORK_PATH 沒有設好,也會有這樣的error message
最後發現,是需要指定otest 執行的arch,所以需要在command前面加"arch -i386",command就會長的像:
        arch -i386 /Developer/Tools/otest  -SenTest  Self  <UT bundle path>

當然,arch 要視你的UT bundle 的設定為何


留言

這個網誌中的熱門文章

What's New in Ethereum Serenity (2.0)

瑞士滑雪分享2 - 策馬特

動手實做零知識 - circom