Swift:如何加载单元测试UIWebView?

Cha*_*had 5 unit-testing uiwebview ios swift

我的应用程序有一个基本的webview控制器来执行一些操作.除了UIWebView的包装外,故事板中的这个视图也不多.控制器本身具有各种公共功能,可以调用它们来加载webview中的页面,如下所示:

class WebViewController: UIViewController, UIWebViewDelegate {

  // MARK: Properties

  @IBOutlet var webView: UIWebView!

  // MARK: UIViewController

  override func viewDidLoad() {
    super.viewDidLoad()
    webView.delegate = self
    loadHomePage()
  }

  // MARK: Public

  public func loadHomePage() {
    navigateWebView(to: HOME_PAGE)
  }

  public func loadSettingsPage() {
    navigateWebView(to: SETTINGS_PAGE)
  }

  public func loadSignOutPage() {
    navigateWebView(to: SIGN_OUT_PAGE)
  }

  // MARK: Private

  private func navigateWebView(to url: String) {
    let request = URLRequest(url: URL(string: url)!)
    webView.loadRequest(request)
  }
Run Code Online (Sandbox Code Playgroud)

我正在尝试编写单元测试,以验证是否将正确的URL发送到webview的loadRequest函数.请注意,我实际上并不关心加载URL; 这只是一个单元测试,所以我真正想要测试的是,例如,loadSettingsPage将带有SETTINGS_PAGE URL的URLRequest发送到要加载的webview.

我试过这样的事情,没有成功:

_ = webViewController.view  // Calls viewDidLoad()   
XCTAssertEqual(webViewController.webView.request?.url?.absoluteString, HOME_PAGE)
Run Code Online (Sandbox Code Playgroud)

assertEqual的第一部分的值是nil.

我想我需要以某种方式嘲笑webView,但我不确定如何去做.有什么建议?

作为一个后续,我也希望能够测试什么时候喜欢webView.reload()webview.goBack()被调用,所以任何指针都会受到赞赏.谢谢!