2015-11-10 17 views
6

MyApp'ı test etmek için UI Testleri hedeflerim var. Belirli MyApp koşullarını test etmek için UI Test hedefinden Uygulamam hedefime bildirim göndermem gerekir.UI Testleri + postNotificationName + asla gözlemciye ulaşmadı + Xcode 7

NSNotificationCenter.defaultCenter().postNotificationName(name, object: nil, userInfo: aUserInfo) 

Bu bildirim UI Testi hedeften gözlemciye ulaşır asla görünüyor, ama Uygulamam hedeften bu bildirimi yayınlarken iyi çalışıyor: UI Testi hedef işlevinden bildirim göndermek için bu kullanıyorum.

UI Hedefinden Uygulamam hedefime nasıl bildirim gönderilir?

+0

Eğer dinlemek istediğiniz addObserver diyorsun? AddObserver'ın postNotification'dan önce çağrıldığından emin misiniz? – picciano

+0

MyApp hedefinden bildirim gönderilmesi iyi çalışıyor ancak UI Testleri hedef dozu gönderilmiyor. Ben de sorumu güncelledim. – Ramis

+1

Konu dışı, ama 'self'' object' argümanı olarak göndermek iyi bir uygulama (ya da kongre?). –

cevap

7

Xcode 7. Kullanma

benzer sorunu (NSNotification belirli UI eyleminden sonra yayınlanmıştır ediliyor sağlamaya çalışıyoruz) var. Bu konuda küçük bir araştırma yaptı. UI testi ve uygulaması farklı işlemlerde çalıştırıldığı için NSNotification alınmadı. NSNotification işlem sınırlarından geçemez ve NSDistributedNotificationServer iOS'ta kullanılamaz. Bu nedenle, şu anda UI test paketi ile uygulama örneği arasında NSNotifications yayınlamanın varsayılan ve kolay bir yolu yoktur. Ancak, işlemler arasında iletişim kurmanın bazı yolları vardır ve test amacıyla küçük bir sarıcı, hatta NSDistributedNotificationCenter iOS vekili yazabilir. Bu harika makaleyi Realm'den kontrol edin:

2

Bellek sızıntılarını test etmek için UI Testini kullanmak istedim ve bunu yapmak için, herhangi bir denetleyici denetleyicisi deiniti çağrıldığında UI test durumundan haberdar olmak istedim. Bu bildirim + veri teslimat için libnotify ve UIPasteboard bir kombinasyonunu kullanır

/** 
    Provides simple IPC messaging. To use this class you need to include  
    #include <notify.h> 
    in your bridging header. (Ab)uses UIPasteboard for message delivery, ie. 
    should not be used in production code. 
*/ 
public class SimpleIPC { 
    /// Event notification name for libnotify. 
    private static let notifyEventName = "com.foo.SimpleIPC" 

    /// libnotify token. 
    private var token: Int32 = 0 

    /// Starts listening to the events 
    public func listen(callback: (String? -> Void)) { 
     notify_register_dispatch(SimpleIPC.notifyEventName, &token, dispatch_get_main_queue()) { token in 
      callback(UIPasteboard.generalPasteboard().string) 
     } 
    } 

    public class func send(message: String) { 
     UIPasteboard.generalPasteboard().string = message 
     notify_post(SimpleIPC.notifyEventName) 
    } 

    deinit { 
     notify_cancel(token) 
    } 
} 

: Ben IPC mekanizması sağlamak üzere bu geldi. Tek yönlü iletişim için olduğu gibi, 2 yol için ya yükü bir gönderici belirteci içerir ya da parametrized libnotify olay adlarıyla 2 örneği kullanın.

  • Matti
+0

2 yol burada nasıl çalışır? Ayarlamakta sorun yaşıyorum. Burada gönderenin belirteci tam olarak nedir? –

0

Mac uygulaması veya bir iOS uygulaması için mi? Bir Mac uygulaması için NSDistributedNotificationCenter'ı kullanabilirsiniz. senin abone olarak

:

NSDistributedNotificationCenter.defaultCenter().addObserver(object, selector: #selector(ObjectsClass.myFuncWithoutParentheses), name: "uniqueString", object: nil) 

yayıncın olarak:

NSNotificationCenter.defaultCenter().postNotificationName("uniqueString" object:nil)