2017-06-21 186 views
0
  1. XCTests是否並行運行(即允許多個測試同時運行?)。考慮一個包含多個測試的單個測試文件,以及多個包含多個測試的測試文件。
  2. 如果在某些正在測試的組件中使用核心數據,並且測試可以並行運行,那麼在測試中使用核心數據的正確方法是什麼?例如,測試應以「乾淨」數據存儲開始,然後根據需要添加對象,然後根據商店內容進行測試。聽起來好像它們全都使用相同的託管對象上下文/存儲,它們將指向相同的數據,因此存在彼此衝突的風險。

回答

1
  1. 每個XCTest方法運行順序(一個在那一刻)

  2. 爲了測試核心數據我經常在內存中創建持久性存儲,在這裏你有良好的文檔片斷:code使用這種MOC的你總是有明確的核心數據狀態

也請您查看此Rays tutorial

0

1.測試案例逐個執行並測試文件。

2.您的核心數據管理對象上下文應該通過在您的測試用例(@testable import product_name)文件中導入您的應用程序並在測試用例文件中訪問核心日期對象來創建。所有測試用例都將獨立運行。 因此,正如你所提到的,測試應該從一個'乾淨'的數據存儲開始,然後根據需要添加對象,然後基於store.yes的內容進行測試,這是正確的方式。確保核心數據管理對象是在測試文件中創建。測試案例可以在測試導航部分進行測試。

1

測試在測試運行器進程的主線程上串行運行。然而,沒有什麼能自動防範你啓動異步操作,這些操作可能會延伸到未來測試用例的執行中。

例如perfomBlockNSManagedObjectContext上的呼叫不保證在下次測試開始前執行。如果您的測試觸發了異步傳播到父管理對象上下文的保存,這可能尤其成問題。

我發現編寫易於測試的代碼非常有價值,這意味着將受管對象上下文或其他依賴項注入到被測代碼中。這應該允許您爲每個測試用例構建獨立的Core Data堆棧,而不是在單個上下文中意外共享某個全局狀態。那麼你只需要提防過分寬容的通知觀察員,這些觀察員不會檢查NSNotification的發件人(即當觀察NSManagedObjectContextDidSaveNotification時)。

+0

「例如,在下一次測試開始之前,不能保證在NSManagedObjectContext上調用perfomBlock。」如果你對測試有期望,那麼呢?在完成之前,測試是否等到預期完成? – Zach

+0

可能的話,如果您正在使用'XCTestExpectation'或等效的異步斷言。例如,您可能可以編寫一個測試tearDown方法,在繼續進行下一個測試之前等待異步事件完成。具體如何確定異步操作已完成取決於您的應用程序,可能會非常棘手。如果可能的話,我發現避免首先共享狀態通常更安全。 – Jonah