3

我正在使用XCTest和的组合OCMock来测试 iOS 应用程序。我正在使用 aUITableViewController来展示我想为其编写一些测试的一系列原型单元。单元格本身位于情节提要中,因此我不相信我可以从笔尖实例化它。

viewController是使用which 使用单元格来实例化它的唯一选择吗?

我正在使用的自定义单元类有许多连接到情节提要上的原型的“IBOutlets”。单元类看起来像这样:

@interface QRFeedAdCell : UITableViewCell

@property (strong, nonatomic) IBOutlet UIImageView *mainImageView;
@property (strong, nonatomic) IBOutlet UIImageView *blurredImageView;
@property (strong, nonatomic) IBOutlet UILabel *titleLabel;
@property (strong, nonatomic) IBOutlet UIButton *someButton;
@property (strong, nonatomic) IBOutlet UILabel *someLabel;
@property (strong, nonatomic) IBOutlet UILabel *anotherLabel;
@property (nonatomic) BOOL isBusy;

@end

我尝试使用实例化单元格,[[QRFeedAdCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"feedAdCell"];但这将加载所有属性设置为零的单元格。

我也尝试过注册单元,但测试也失败了:

 id mockTableView = [OCMockObject niceMockForClass:[UITableView class]];
[mockTableView registerClass:[QRFeedAdCell class] forCellReuseIdentifier:@"feedAdCell"];

QRFeedAdCell *cell = [mockTableView dequeueReusableCellWithIdentifier:@"feedAdCell"];

XCTAssertNotNil(cell, @"");
XCTAssertNotNil(cell.mainImageView, @"");
4

3 回答 3

4

你不能。

测试它的唯一方法是实例化故事板,然后是视图控制器,然后是单元格本身,然后测试您在 Interface Builder 中设置的属性。

于 2014-01-19T19:37:47.930 回答
0

您可以以编程方式实例化,但首先您需要通过调用来注册它

[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"cellId"];

然后您可以对单元格进行自定义样式或您通常在情节提要中执行的任何操作,如下所示

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cellId" forIndexPath:indexPath];

        // create and add a label
        UILabel * label = [[UILabel alloc]initWithFrame:CGRectMake(10, 8, 155, 21)];
        label.text = @"text";
        [cell addSubview:label];
        ...
}
于 2014-01-15T18:53:33.167 回答
0

这以一种基本的方式为我工作。我还没有让 viewwillappear 运行。
ViewdidLoad 在您调用 _vc 上的 .view 时运行。

@property (nonatomic, strong) Edit_ProfileVC *vc;
@property (nonatomic, strong) UIView *view;
@property (nonatomic) NSMutableDictionary *params;

 UIStoryboard *mainSB = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
    _vc = [mainSB instantiateViewControllerWithIdentifier:@"EditProfileVC"];
    _vc.userData = [[EditUserTableDataSource alloc] initDataSourceWithJSON:self.params];
    _view = _vc.view;
    XCTAssertNotNil(_view, @"the view is not loading properly");
于 2014-04-30T05:39:34.047 回答