2016-03-23 24 views
3

Bu konuyla ilgili birkaç soru var ama bunlar benim neyim olduğu değil. Bir diğeri tarafından tetiklenen iki UIAlertController örneğini sunan uygulamam için küçük bir Swift uygulaması derece istemi yazdım.UIAlertController üzerinde UIAlertAction'ı programlı olarak tetikle?

Şimdi bunu sınaya çalışıyorum ve bu ikinci uyarıya testlerde ulaşmaya çalışıyorum. İlk denetleyiciyi kontrol etmek için basit bir casus yazdım, ama ilk uyarıdaki eylemlerden birini tetiklemek için bir yol istiyorum, ki bu da ikincisini gösteriyor.

Zaten alert.actions.first?.accessibilityActivate()'u denedim, ancak bu eylemin işleyicisinin içinde kırılmadı.

cevap

4

İşte ne yaptım kabaca verilmiştir: uyarı kontrolörü sunmak ve benim birim testlerinde olur benim sınıfın bir alay versiyonunu düzenlendi

  1. , bu alay kullandı.

  2. overrode şu ben olmayan alay sürümünde oluşturulmuş etmişti yöntemi: Bazı özelliklerinde eylemler hakkında tüm ayrıntılar geçersiz kılınan uygulamada

    func alertActionWithTitle(title: String?, style: UIAlertActionStyle, handler: Handler) -> UIAlertAction 
    
  3. , depolanmış (Handler sadece typealias olduğunu 'Daha sonra)

    var didCreateAlert = false 
    var createdTitles: [String?] = [] 
    var createdStyles: [UIAlertActionStyle?] = [] 
    var createdHandlers: [Handler?] = [] 
    var createdActions: [UIAlertAction?] = [] 
    
  4. () -> (UIAlertAction) d uyarılar arasında yolu çapraz zaman testler, çalıştırırken, Ben yineleme için callHandlerAtIndex yöntemi uygulamaya Benim işleyicileri yatar ve doğru olanı yürütürüm.

    feedback.start() 
    feedback.callHandlerAtIndex(1) // First alert, second action 
    feedback.callHandlerAtIndex(2) // Second alert, third action 
    XCTAssertTrue(mockMailer.didCallMail) 
    
    :

Bu benim testler şuna benzer anlamına gelir