每默認模板中的註釋爲XCTestCase
關於setUp
:XCTestCase的setUp方法的目的是什麼?
Put setup code here; it will be run once, before the first test case.
然而,在XCTestCase.h
,上述setUp
狀態不同的意見:
Setup method called before the invocation of each test method in the class.
要確認的實際行爲,我把NSLog
放在setUp
之內來計算它被調用的次數:
static int count = 0;
- (void)setUp
{
[super setUp];
count++;
NSLog(@"Call Count = %d", count);
}
這導致setUp
方法每個測試方法(確認上XCTestCase.h
註釋)之前被調用。
我想用setUp
方法來創建測試/模擬對象一次(例如設置一個核心數據測試棧)。一遍又一遍地創建這些將會是處理器密集型的,並且可能非常緩慢。
所以,
1)什麼是setUp
實際上打算用來做什麼?開發人員不是一遍又一遍地創建對象嗎?
2)我怎樣才能創建這些對象只有一次在XCTestCase
內?
+1:很好的回答!是的,考慮它,* 1)測試順序不能保證*(但是有很好的測試,不管什麼時候會發生什麼都沒有關係)和* 2)測試不應該受到其他測試的影響*你提到,他們'不應該依賴任何以前的測試狀態')。 「內存」堆棧也是個好主意。這正是我要做的。 –
看完這個答案之後,我立即刪除了我的+1;)注意:XCTest或多或少是SenTest的副本,它繼承了它的所有限制。有更好的測試框架可以任意嵌套,其中_setup_和_teardown_過程是顯而易見的。不幸的是,Xcode和XCTest遠遠落後,將非常酷的第三方測試框架集成到令人興奮的Xcode測試框架中非常困難。 – CouchDeveloper
@ JRG-Developer完全正確 - 測試訂單不能保證。 @CouchDeveloper例如,[specta](https://github.com/specta/specta)有'beforeEach','beforeAll','afterEach'和'afterAll'方法。 –