我要檢查,如果運行代碼單元TESE情況或不結果,如執行不同的代碼:檢查正在運行的代碼單元測試用例或不
if (unit test case is running)
{
do something
}
else
{
do other thing
}
對此有何想法?
我要檢查,如果運行代碼單元TESE情況或不結果,如執行不同的代碼:檢查正在運行的代碼單元測試用例或不
if (unit test case is running)
{
do something
}
else
{
do other thing
}
對此有何想法?
這是一種糟糕的方法,您應該嘗試模擬您正試圖通過Mock ojects或其他機制來避免此狀態的邏輯部分。
現在你的問題你可以使用一個像isUnittest
這樣的設置在測試設置和拆解上的類型變量,如果你喜歡,我不建議你這麼做。
請勿直接發送信息UIAlertView
。相反,使用依賴注入,例如財產一樣
@property (strong, nonatomic) Class alertViewClass;
那麼你的代碼來創建一個警報可以做
UIAlertView *alert = [[_alertViewClass alloc] initWithTitle:…etc…];
在你的測試代碼,注入不同的類。我使用https://github.com/jonreid/JMRTestTools來指定JMRMockAlertView
。然後,我可以使用JMRMockAlertViewVerifier
來測試警報呼叫。 (實際上,這使得警報的測試驅動開發成爲可能。)
另一種方法是讓該類具有通過靜態方法控制的可自定義行爲,並讓測試用例在其靜態裝入方法中調用該方法。
我有一個類似的問題,使用故事板和外部寧靜的服務通過oauth進行身份驗證。應用程序委託會檢查appdelegate中是否存在有效的oauth標記:didFinishLaunchingWithOptions,如果沒有,則編程方式觸發segue執行oauth登錄。但這在測試案例中並不理想。爲了解決這個問題,我在應用代理中創建了一個靜態方法來禁用登錄屏幕。這是我的應用程序委託中的代碼:
static Boolean showLoginScreen = TRUE ;
+ (void) disableLoginScreen
{
showLoginScreen = FALSE ;
NSLog(@"disabled login screen") ;
}
測試用例有其負載的方法來做到以下幾點:
// disable login screen for the test case
+ (void) load {
NSLog(@"now disabling login screen") ;
[XYZAppDelegate disableLoginScreen];
}
這工作,因爲申請被初始化之前測試用例類加載。當然,您必須在應用程序委託中檢查此標誌的值以觸發/不觸發登錄繼續。我嘗試但拒絕的其他替代方案如下:
在測試目標上創建一個預處理器定義。但是編譯器只用這個標誌編譯測試用例文件,而不是應用程序源文件。請參閱http://www.innovaptor.com/blog/2013/09/02/xcode-preprocessor-macros-for-test-code.html
使用測試用例的靜態初始化方法調用disable方法。在測試用例運行時,應用程序在加載測試用例類之前啓動。有關詳細信息,請參閱http://www.friday.com/bbum/2009/09/06/iniailize-can-be-executed-multiple-times-load-not-so-much/。
這似乎爲我工作(的iOS 8時,Xcode 6):
- (BOOL) isRunningTest {
return NSClassFromString(@"XCTestCase") != nil;
}
我覺得這是比其他答案清潔和更容易。
只有將所有測試用例寫入一個類名XCTestCase時,這纔是一個好主意。但是我意識到我要實現的目標是一個非常糟糕的主意!感謝您的努力... –
確實,'XCTestCase'是iOS測試框架的一部分,因此無論如何它都可以工作(至少,如果您沒有在應用中導入框架,這並沒有多大意義)。 – manueGE
作爲一個方面說明,即使對象不是'nil',將一個對象轉換爲'BOOL'也可以產生'NO'。 'BOOL'將使用指針的最後幾位,可以是這樣的:'00000000',它將被註冊爲'NO'。請參閱本文中的「投射到BOOL」:https://www.mikeash.com/pyblog/friday-qa-2012-12-14-objective-c-pitfalls.html – MaxGabriel
感謝您的線索,但事情是我想彈出一個警告只有單元測試用例運行,我不想在源代碼中添加任何布爾變量。我只想知道哪個目標運行有任何方法來檢查它? –
不是你使用unittest的框架提供這樣一個標誌嗎? – CloudyMarble
不,但我最終使用了布爾標誌,正如你所說的。謝謝 –