Проверьте, что контроллер представления успешно отклонен с анимацией

Я очень новичок в разработке для iOS и пытаюсь написать тестовый блок для класса. Он имеет только один метод с именем homeButtonTouched(), который отклоняет контроллер представления с анимацией. Как я могу написать модульный тест для этого? Вот как выглядит класс.

class AboutViewController: UIViewController {

    // MARK: Action
    @IBAction func homeButtonTouched(_ sender: UIButton) {
        dismiss(animated: true, completion: nil)
    }
}

Это то, что я написал до сих пор в моем тестовом классе. Все, что мне нужно, это заполнить метод testHomeButtonTouched().

class AboutViewControllerTests: XCTestCase {

    var aboutViewController: AboutViewController!

    override func setUp() {
        aboutViewController = UIStoryboard(name: "Main", bundle: Bundle.main).instantiateViewController(withIdentifier: "About View Controller") as! AboutViewController
        aboutViewController.loadView()

        super.setUp()
    }

    override func tearDown() {
        aboutViewController = nil

        super.tearDown()
    }

    /** Test that pressing the home button dismisses the view controller */
    func testHomeButtonTouched() {

    }

}

1 ответ

Вы можете создать фиктивный класс и переопределить любой вызов func исходного класса, чтобы проверить, был ли вызван этот func. Такие как это:

func test_ShouldCloseItself() {
    // mock dismiss call
    class MockViewController: LoginViewController {
        var dismissCalled = false
        override func dismiss(animated flag: Bool, completion: (() -> Void)? = nil) {
            self.dismissCalled = true
        }
    }

    let vc = MockViewController()
    vc.actionClose(self)
    XCTAssertTrue(vc.dismissCalled)

}

Используйте тестирование пользовательского интерфейса для этого. Создайте новый тестовый файл, выбрав File->New->Target->iOS UI Testing Bundle.

Запустите тестовый скрипт с помощью Cmd+U. Затем используйте красную кнопку записи над консолью, чтобы автоматически записать тест, все, что вам нужно сделать на этом этапе, - закрыть контроллер представления с помощью симулятора, и xcode напишет тест для вас.

Чтобы ответить на ваш вопрос, однако, если вы хотите проверить, что ваш контроллер представления был отклонен, вы можете написать assert, чтобы проверить, является ли это представленный в настоящее время контроллер представления следующим образом:

if var topController = UIApplication.shared.keyWindow?.rootViewController {
  while let presentedViewController = topController.presentedViewController {
    topController = presentedViewController
  }
XCTAssertTrue(!topController is AboutViewController)
}
Другие вопросы по тегам