2014-10-06 8 views
8

Chcę uruchomić test oczekujący na odpowiedź przeglądarki.Używanie schematu URL w XCTestCase

Miejsce docelowe testu zawiera plik Info.plist, w którym można zarejestrować schematy niestandardowych adresów URL. Ale te nigdy nie są wywoływane. Wiem, że cel testowy nie jest prawdziwą aplikacją.

Czy istnieje sposób?

EDYCJA (dla nagrody): Chcę napisać test integracji dla klasy, która wywołuje openUrl("tel://" + some phone number). Jak mogę zasubskrybować ten schemat URL w XCTestCase?

+0

Czy jesteś w stanie osiągnąć to, czego potrzebujesz dzięki NSURLProtocol? –

+0

Czy mógłbyś przeformułować to, co masz na myśli przez "zasubskrybuj schemat URL"? Masz na myśli, w jaki sposób określasz, która aplikacja jest przypisana do obsługi określonego schematu? Czy masz na myśli, jak sprawdzić, czy openURL faktycznie wykonuje akcję? –

+0

Moja aplikacja jest zarejestrowana w takim schemacie URL: myapp: //. Chcę przetestować, czy mogę otworzyć witrynę http://mywebsite.com w przeglądarce, która przekieruje mnie do myapp: // w końcu. – McZonk

Odpowiedz

-1

Nie jestem pewien, co dokładnie próbujesz przetestować. Zakładam, że jest to coś więcej niż to, czy adres URL można otworzyć, czy nie. Poniższy przykład testowy sprawdza, czy FaceTime otworzy się i może otworzyć URL. Jeśli testowana aplikacja rejestruje schemat niestandardowy, to po prostu zmiana pathToTestApplication powinna działać.

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

Chcę przetestować, czy moja aplikacja została pomyślnie zarejestrowana w schemacie URL i czy otrzyma wywołanie zwrotne po otwarciu myapp: //. – McZonk

+0

Miejsce docelowe testu, którego częścią jest ten kod XCT, rzeczywiście sprawdzi, czy aplikacja jest zarejestrowana do obsługi tego schematu.Ostatni test określi również, czy pomyślnie komunikował się z aplikacją. Jednak jeśli chcesz zobaczyć, co aplikacja faktycznie otrzymała z aplikacji testowej, będziesz musiał samodzielnie przydzielić instrument. –

1

Pytanie zostało retagged do OS X, więc moja odpowiedź nieważne jest

Original odpowiedź

To jest niemożliwe. Podstawową przyczyną jest to, że testy są połączone z jedną uruchomioną instancją aplikacji, nie mają kontroli nad urządzeniem, działają w ramach aplikacji. Prawdopodobnie możesz otworzyć adres URL, ale nie będziesz mógł wrócić do aplikacji i zrobić potwierdzenia.

Należy również zauważyć, że XCUnit jest jednostką testową jednostka. Nie będzie można w nim zapisać zaawansowanego testu integracji. Możesz być bardziej skuteczny dzięki Automatyzacji UI, ale ten konkretny przypadek testowy będzie bardzo skomplikowany, nawet w tym przypadku. Na przykład, aby otworzyć łącze przez aplikację w symulatorze, możesz utworzyć stronę HTML, która przekieruje cię do łącza, a następnie użyje powłoki do wykonania komendy open testLink.html -a "iOS Simulator". Jednak w mojej skromnej opinii tego rodzaju testy są niewiarygodne i naprawdę ciężko pisać i debugować.

Moja rada to:

  1. Napisz test jednostki, która drwi [UIApplication openURL:] i sprawdzić, czy są przechodzącą prawidłowy adres URL do niego. Lub jeśli chcesz w innym kierunku, napisz test jednostkowy, który wywoła metody UIApplicationDelegate w kolejności wywoływanej, symulując otwarcie łącza przez twoją aplikację. To jest tak daleko, jak można przejść z XCUnit.
  2. Przetestuj resztę ręcznie.
+0

Moje pytanie dotyczy systemu OS X. Nigdy nie pytałem o system iOS. Ale myślę, że masz rację. Niemożliwe jest zarejestrowanie testu w schemacie URL. – McZonk

+0

@McZonk Oznaczono 'kakao-touch'. – Sulthan

+0

Nie Lojalny Tingley. Myślę jednak, że problem będzie istniał dla obu platform. – McZonk

Powiązane problemy