2014-10-06 14 views
8

Voglio eseguire un test che attende la risposta di un browser.Utilizzo di uno schema URL in XCTestCase

Un target di test ha un Info.plist in cui è possibile registrare schemi URL personalizzati. Ma quelli non vengono mai chiamati. So che un obiettivo di test non è una vera applicazione.

C'è un modo?

MODIFICA (per taglia): Voglio scrivere un test di integrazione per una classe che chiama openUrl("tel://" + some phone number). Come posso iscrivermi a questo schema URL in un XCTestCase?

+0

Sei in grado di ottenere ciò che ti serve con NSURLProtocol? –

+0

Potresti riformulare cosa intendi con "iscriviti a uno schema URL"? Intendi, come stabilisci quale applicazione è stata assegnata per gestire uno schema particolare? O intendi, come collaudi se openURL esegue effettivamente l'azione? –

+0

La mia applicazione è registrata in uno schema URL come questo: myapp: //. Voglio testare se posso aprire http://mywebsite.com in un browser che reindirizzerà a myapp: // alla fine. – McZonk

risposta

-1

Non sono sicuro di cosa si stia tentando di testare. Suppongo che sia qualcosa di più del fatto che l'URL possa essere aperto o meno. Il test case qui sotto controlla se FaceTime si apre e può aprire un URL. Se l'app che si sta testando registra uno schema personalizzato, cambiare semplicemente pathToTestApplication dovrebbe funzionare.

enter image description here

class NSURL_SchemeTests: XCTestCase { 

    func testWhoHandlesSchemeTel() { 
     let testAppURL = NSURL(string: pathToTestApplication) 

     // create a NSURL for the test 
     let tel = "tel:5555555555" 
     let url = NSURL(string: tel) 
     XCTAssert(url != nil, "Could not create a URL from \(tel)") 

     // determine whether any application is registered to handle the URL 
     let workspace = NSWorkspace.sharedWorkspace() 
     let urlHandler = workspace.URLForApplicationToOpenURL(url!) 
     XCTAssert(urlHandler != nil, "No application found to open URL \(tel)") 

     // determine whether the expected test application is registered to handle the URL 
     XCTAssert(urlHandler! == testAppURL, 
      "Application \(pathToTestApplication) was not registered to handle URL \(tel)") 

     // attempt to open the URL 
     XCTAssert(workspace.openURL(url!), "Could not open URL \(tel)") 
    } 
} 
+0

Voglio testare se la mia applicazione è stata registrata con successo su uno schema URL e se ottiene una richiamata quando myapp: // è aperto. – McZonk

+0

L'obiettivo del test di cui fa parte questo codice XCT testerà effettivamente se l'applicazione è registrata per gestire lo schema.L'ultimo test determinerà anche se ha comunicato correttamente con l'applicazione. Tuttavia, se vuoi vedere ciò che la tua applicazione ha effettivamente ricevuto dall'app di prova, dovrai strumentare l'applicazione stessa. –

1

La domanda è stata rimarcato a OS X quindi la mia risposta non è più valida è

risposta originale

Questo è impossibile. Il motivo di base è che i test sono collegati a un'istanza dell'applicazione in esecuzione, non hanno il controllo sul dispositivo, sono in esecuzione come parte dell'applicazione. Probabilmente puoi aprire l'URL ma non sarai in grado di tornare all'applicazione e fare un asserzione.

Si noti inoltre che XCUnit è un quadro di prova unità. Non sarai in grado di scrivere test di integrazione avanzati. Potresti avere più successo con UI Automation ma questo specifico test case sarà molto complicato anche per questo. Ad esempio, per aprire un collegamento dalla tua app nel simulatore, puoi creare una pagina HTML che reindirizzerà al link e quindi userai shell per exec open testLink.html -a "iOS Simulator". Tuttavia, a mio modesto parere questo tipo di test è inaffidabile e davvero difficile da scrivere e fare il debug.

Il mio consiglio sarebbe quello di:

  1. Scrivi una prova di unità che prende in giro [UIApplication openURL:] e verificare che si passa un URL corretto ad esso. Oppure, se vuoi l'altra direzione, scrivi un test unitario che chiamerà i metodi UIApplicationDelegate nell'ordine chiamato, simulando l'apertura di un link dalla tua app. Questo è quanto puoi andare con XCUnit.
  2. Verificare il resto manualmente.
+0

La mia domanda riguarda un OS X. Non ho mai chiesto di iOS. Ma immagino tu abbia ragione. È impossibile registrare un test su uno schema URL. – McZonk

+0

@McZonk Hai taggato 'cocoa-touch'. – Sulthan

+0

No Loyal Tingley ha fatto. Comunque penso che il problema sarà presente per entrambe le piattaforme. – McZonk