单元测试有很多资源,无论是纯粹的逻辑还是应用程序级别,我目前正在尝试测试在故事板中有IBOutlets的UITableViewCell
,并且有几个帖子已经确认我是否希望实例化故事板,然后实例化包含单元格的视图控制器。因此,您必须完成几个步骤,以确保故事板和后续元素与其IBOutlet正确加载
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
self.vc = [storyboard instantiateViewControllerWithIdentifier:@"testTableViewController"];
[self.vc performSelectorOnMainThread:@selector(loadView) withObject:nil waitUntilDone:YES];
后面跟着此代码从UITableViewCell
UITableViewController
[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已经加载了,但是当我真正去断言什么时,它们突然消失了一个我...
参考文献无缘无故消失或我做错了。
答案 0 :(得分:1)
所以我做了一些我将在这里分享的发现,其中一个是我问题的解决方案,而最初这个问题是我试图解决一个更大问题的一个小症状。
更大的问题是,我正在测试一些UITableViewCells,但不幸的是他们的IBOutlets从故事板连接起来总是为零,这导致我试图弄乱应该如何初始化被测系统。
我还发现使用[self.vc performSelectorOnMainThread:@selector(loadView) withObject:nil waitUntilDone:YES];
的结果不一致,因为有时我仍然需要调用view
或viewDidLoad
才能正确初始化。所以,我完全取消了它,只需要调用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];
现在虽然这个初始化,但是由于这个类存在于故事板中,所以似乎还有一些缺失的步骤,因此我推荐以下
@{ ViewBag.Title = "Home Page"; }
<script scr="~/scripts/knockout-3.3.0.js" type="text/javascript">
<div data-bind="template: 'friendsTemplate'"></div>
<script type="text/javascript">
$(function () {
function friend(name) {
return {
name: ko.observable(name)
};
}
var viewModel = {
firstName: ko.observable('Hemant'),
lastName: ko.observable('Shelar'),
friends: ko.observableArray([new friend('Atul'), new friend('Atul'), new friend('Atul')])
};
viewModel.fullName = ko.dependentObservable(function () {
return this.firstName() + ' ' + this.lastName()
}, viewModel);
ko.applyBindings(viewModel);
alert('ok');
});
</script>
<script id="friendsTemplate" type="text/html">
<ul>
{{each(index,friend) friends}}
<li>
${friend.name}
</li>
{{/each}}
</ul>
</script>