2017-02-09 10 views
0

Я пытаюсь выполнить модульное тестирование контроллеров представлений в xCode 8. Я могу записывать, утверждать и запускать его с помощью XCUI. Но я хочу протестировать определенный контроллер просмотра самостоятельно.UI Testing с XCUI

Как и 4 контроллера A, B, C и D в последовательности (A-> B-> C-> D). Я хочу напрямую запустить C-контроллер и проверить его самостоятельно.

Я могу протестировать таким образом, то есть по умолчанию XCUIApplication откроет контроллер, затем нажмите на что-то, что вы перейдете на B-контроллер, а затем нажмите кнопку в B, чтобы перейти к C-контроллеру. Затем вы можете проверить это. Но я не хочу в последовательности. Я хочу напрямую протестировать контроллер C.

Можете ли вы, пожалуйста, помочь, если кто-то другой выполнил такую ​​же работу. Спасибо заранее.

ответ

1

В XCUITest с Xcode

Если вы с помощью UITestCase сейчас, вы не можете напрямую открывать D Контроллер

каждый должен делать последовательность (А-> B-> C-> D), потому что все теста особое_разрешение вызвать приложение запускает espectially зарегистрировались, SignOut должны быть необходимы для UITest каждый раз, когда

дополнительный способ использовать XCUI тест для TestCase

обеспечивают A, B, функция последовательности с в качестве протокола для минимизации дублированный кода

ех) определяют Логин протокол

protocol Loginable { 
    var app: XCUIApplication! { get } 
    func login() 
} 

extension Loginable { 
    func login() { 
     //do login ... typting textfield , tap login button 
    } 
} 

расширить A, B, C, D UITestCase с помощью Loginable удалить скопированный код (потому что каждый D uitest случай должен быть logined в примере)

расширение грим для функции последовательности повторно использовать каждый случай

альтернативным решением является

использование KIF Functional Test framework

КИФ может проверить UITest на основе XCTest вместо XCUITest

КИФ может получить доступ к классу, как модульное тестирование, что означает

вы можете показать свой D ViewController в окно (набор RootViewController непосредственно) и протестировать функцию КИФ UItest

ех) КИФ

import XCTest 

@testable import YourApp 
class DViewControllerTests: XCTestCase { 

    var sut: DViewController! 
    var window: UIWindow! 

    override func setUp() { 
     super.setUp() 

     let appDelegate = UIApplication.shared.delegate as! AppDelegate 
     window = appDelegate.window 

     sut = //Initialize your D ViewController 
     window.rootViewController = sut 
     RunLoop.current.run(until: Date()) // cause viewDidLoad 
    } 

    func testSomeCase() { 
     tester().tapView(withAccessibilityIdentifier: "someIdentifier") 
     ... 
    } 
} 

КИФ может непосредственно запустить D настройки контроллера RootViewController к окну

+0

спасибо Круз. Ваше решение выглядит очень полезным. Я его реализую. Большое спасибо. –

+0

@GopeshGupta – Cruz