我有一個應用程序,我正在進行單元測試。在正常使用情況下,App Delegate設置了一些東西,並開始運行。然而,當我運行我的單元測試時,我希望App Delegate不要做太多的事情,如果有的話。我將如何去完成這件事?看起來,一些安裝的東西在運行測試運行器時正在運行,並且它往往在測試運行時引發異常,導致它失敗。iOS單元測試如何停止應用程序從做東西代表
回答
你想看看Mocks(或雙打)。一般來說,這是一種在進行測試以繞過諸如服務器調用,打印,日誌記錄之類的測試時轉移呼叫的方式...
以最簡單的形式,您可以通過將您想要修改的對象試驗。
說你有
@interface YourClass : NSObject
@property NSString *dataFromServer;
@end
@implementation YourClass
-(void) load
{
// Bunch of calls to the server you don't want to do while testing.
self.dataFromServer = dataFromServerCallsYouDontWantToRun;
}
-(NSString*) getServerData
{
return dataFromServer;
}
@end
說你想測試getServerData,但不希望實際運行,因爲調用數據庫的負載。假設您只想將dataFromServer硬編碼爲@「Mock」。
在您的UnitTest項目中,從YourClass繼承並覆蓋您不想在測試中實際運行的任何函數。
@interface YourClassMock : YourClass
@end
@implementation YourClassMock
-(void) load
{
NSLog(@"In Mock");
self.dataFromServer = @"Mock";
}
@end
現在你的測試看起來像這樣
- (void) testLoad
{
YourClassMock yourClass = [[YourClassMock alloc] init];
[yourClass load];
STAssertEquals([yourClass getServerData], @"Mock", @"Returns mock data");
}
所以你完全不用實際調用您的複雜負載測試方法getServerData。
這是一個基本的,做你自己的例子,但有很多庫,以幫助加快這一點,如OCMock(http://ocmock.org/)。這可以爲你創建模擬對象,而不需要任何子類。你應該看看。但希望你明白你將如何使用它。更多信息 - http://nshipster.com/unit-testing/
我喜歡你關於嘲笑的信息,但在OP的情況下,這將如何工作,由於應用程序的競爭條件開始與測試?我的意思是,XCTestCase是否可以在應用程序的啓動生命中的某個特定時刻執行,並且可以預測,以便可以模擬應用程序委託的啓動功能? – stonedauwg
XCTest是它自己的目標。它運行而不是應用程序來執行部分代碼。理想情況下,一次只進行一小部分單元測試。當你運行測試時,你不是直接運行你的應用程序。 NSHipster鏈接解釋它很好。 – ansible
- 1. 單元測試奇怪的東西
- 2. MVC - 單元測試錯誤的東西?
- 3. 我該如何讓android應用程序按時間做東西?
- 4. 如何編寫測試:Socket.io應用程序單元測試
- 5. 如何做單元測試
- 6. 怎麼做反應本地應用程序的單元測試
- 7. 如何使用jmockit做單元測試單元測試
- 8. android測試應用程序..東西沒有工作
- 9. 單元測試DAL - 停止運行單元測試時連接
- 10. 如何單元測試應用程序更新程序
- 11. 停止django從自動unicodifing POST東西
- 12. iOS單元測試通用應用程序
- 13. 停止ReSharper從重新排序單元測試的清理
- 14. 單元測試ASP.NET應用程序
- 15. Android應用程序單元測試
- 16. 單元測試tkinter應用程序
- 17. 單元測試batman.js應用程序
- 18. 單元測試JavaEE應用程序
- 19. 單元測試Dababase應用程序
- 20. Selenium單元測試ExtJS應用程序
- 21. 單元測試opencv android應用程序
- 22. 單元測試Vertx.io應用程序
- 23. WPF應用程序的單元測試
- 24. 單元測試CLI/MFC應用程序
- 25. 單元測試快速應用程序
- 26. WebTest單元測試瓶應用程序
- 27. .net單元測試 - 如何做UI單元測試
- 28. 單元測試iOS應用程序同步邏輯
- 29. 單元測試php應用程序(我應該壓力測試?)
- 30. 你如何測試小東西? (Eclipse Android)
此答案可以幫助[Xcode項目如何以編程方式檢測目標或如何使用env vars](http://stackoverflow.com/a/6964951/310903) – voromax
[Xcode中的單元測試,它運行的應用程序?](http://stackoverflow.com/questions/15714697/unit-testing-in-xcode-does-it-run-the-app)你會在那裏找到答案。 – Sulthan