3

この「成功」シナリオのテストケースを作成する方法は?

if ([tblView.delegate respondsToSelector:@selector(tableView:viewForHeaderInSection:)]) {
         ...
}else{
         ...
}

以下のモックデリゲートを迅速に作成してみました:

class MockTableViewDelegate:NSObject, UITableViewDelegate {

  @objc func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
            return 30
        }

        // MARK: Delegates
   @objc func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
            return UIView()
        }
}

コード:

mockTableView.delegate=MockTableViewDelegate()  
print("delegate===\(mockTableView.delegate)")

nil を出力します。データソースに対して試したのと同じモックアップで、データソース obj を返しています。デリゲートがnilを返すのはなぜですか? このシナリオをテストする方法は?

4

2 に答える 2

0

最後に、これは iOS ランタイムのバグであることがわかりました。この問題を解決する 1 つの方法は OCMock を使用することですが、Swift では使用できません。だから私は今のところObjective-cで書いています。

UITableView *tableView = [[UITableView alloc]init];
UIView *headerView = [UIView new];

id delegateProtocolMock = OCMProtocolMock(@protocol(UITableViewDelegate));
tableView.delegate=delegateProtocolMock;
OCMStub([delegateProtocolMock tableView:tableView viewForHeaderInSection:0]).andReturn(headerView);
于 2016-05-11T04:13:58.653 に答える