2013-01-08 74 views
0

我需要某種if語句來忽略某些代碼位,例如,彈出對話框,如果編碼正在作爲單元測試的一部分運行。如何確定代碼是否在單元測試運行期間運行

有沒有人有任何想法必須這樣做 - 類似於調試?

+0

我刪除了我的答案(它不像@Sulthan所說的那樣),但是我想提一下我在其中的註釋:這可能不是一件好事,因爲您在測試中會有不同的行爲。測試代碼距離真實代碼越近越好。如果可以的話,我會建議找到其他方法(例如通過代碼解除彈出對話框)。 – Julien

+0

@Julien我同意。我正在嘗試僅針對業務代碼和UI自動化使用單元測試。如果業務代碼與用戶界面正確分離,則工作得很好。 – Sulthan

回答

0

我喜歡運行的解決方案,而不是一個基於預處理:

int main(int argc, char* argv[]) { 
    @autoreleasepool { 
     BOOL tests = NO; 

     for (int i = 0; i < argc; i++) { 
      NSString* argument = [NSString stringWithCString:argv[i] encoding:NSASCIIStringEncoding]; 

      if ([argument isEqualToString:@"-SenTest"]) { 
       tests = YES; 
       break; 
      } 
     } 

     if (tests) { 
      //save YES to a global variable and use it whenewer you want 
     } 

     UIApplicationMain(...) 

    } 
} 
其實我用這個有

不同UIApplicationDelegate單元測試運行時,所以沒有UI代碼(DB開放,通知開始等)與我的測試案例相沖突。

+0

@TheLearner Whenewer您正在運行SenTests(OCUnit),必須有'-SenTest'參數,通常使用下一個參數指定'All'或要運行的單個測試用例。 'NSLog'的論點,你會看到我是對的。 – Sulthan

相關問題