簡體   English   中英

單元測試初始化​​情節提要

[英]Unit Testing Initialising storyboard

無論是純粹的邏輯級別還是應用程序級別,都有很多關於單元測試的資源,我目前正在嘗試測試在情節UITableViewCell中具有IBOutlet的UITableViewCell ,並且一些帖子已經確認我是否要實例化此情節提要,然后查看視圖。包含單元格的控制器。 因此,您必須經過幾個步驟,以確保情節提要和后續元素正確加載到其IBOutlet中,如下所示

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
self.vc = [storyboard instantiateViewControllerWithIdentifier:@"testTableViewController"];
[self.vc performSelectorOnMainThread:@selector(loadView) withObject:nil waitUntilDone:YES];

其次是這個代碼得到UITableViewCellUITableViewController

[self.vc setTableViewData:@[@1].mutableCopy];
[self.vc.tableView reloadData];
[self.vc.tableView layoutIfNeeded];

SUT = [self.vc.tableView dequeueReusableCellWithIdentifier:@"More Menu Cell"
                                         forIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]];

這會生成一個單元格,但是對我來說,我在測試中的系統中的第一個斷點似乎表明IBOutlets已加載,但是當我實際聲明任何內容時,它們突然消失了一個……

引用無緣無故消失,或者我做錯了事。

因此,我取得了一些發現,我將在這里分享一些發現,其中之一是解決我的問題的方法,而最初,這個問題只是我試圖解決一個較大問題的一個小症狀。

更大的問題是,我正在測試一些UITableViewCells,但是不幸的是,它們的IBOutlets是從情節提要中連接的,始終為零,這導致我嘗試弄亂應如何初始化被測系統。

我還發現了使用[self.vc performSelectorOnMainThread:@selector(loadView) withObject:nil waitUntilDone:YES];混合結果[self.vc performSelectorOnMainThread:@selector(loadView) withObject:nil waitUntilDone:YES]; 因為有時我仍然必須調用viewviewDidLoad才能正確初始化。 因此,我完全取消了它,只是調用了view ,它似乎工作正常。

但是,盡管我進行了上述更改,但我的牢房仍然沒有零出口。 在互聯網上翻找一番后,我發現,您應該只使用[self.tableView registerClass:[MyTableViewCell class]forCellReuseIdentifier:@"MytableViewcell"]; 如果已創建,則在情節提要中將其創建為原型單元。 看來它已經為您做到了,再次嘗試這樣做會破壞IBOutlets

另一個小發現是嘗試通過這樣的方式來測試我的UIViewController

MyViewController *SUT = [MyViewController new];
[SUT view];

現在雖然已初始化,但由於該類存在於情節提要中,因此似乎又缺少一些步驟,因此我建議以下內容

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
SUT = [storyboard instantiateViewControllerWithIdentifier:@"My Table VC"];
[SUT view];  

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM