Attualmente sto usando Quick + Nimble per il mio test dell'unità in Swift. Sto creando una classe Inviter
che invia gli inviti alle app con metodi diversi.Come simulare un'applicazione UIA in Swift?
Devo prendere in giro l'applicazione UIA per verificare che il mio codice chiami openURL
.
Il mio codice finora:
import Quick
import Nimble
import OCMock
extension Inviter {
convenience init(usingMockApplication mockApplication: UIApplication) {
self.init()
application = mockApplication
}
}
class MockUIApplication : UIApplication {
var application = UIApplication.sharedApplication()
var openedURL: String?
override func openURL(url: NSURL) -> Bool {
openedURL = url.absoluteString
return true
}
}
class InviterSpec: QuickSpec {
override func spec() {
describe("Inviter") {
var mockApplication = MockUIApplication()
var inviter = Inviter(usingMockApplication: mockApplication)
beforeEach() {
inviter = Inviter(usingMockApplication: mockApplication)
}
context("for WhatsApp invites") {
beforeEach() {
inviter.inviteViaWhatsAppWithMessage("Invite Message.")
}
it("should tell the application to open WhatsApp") {
expect(mockApplication.openedURL).toNot(beNil())
}
it("should send WhatsApp the right message") {
let message = mockApplication.openedURL?.lastPathComponent
expect(message).to(equal("Invite%Message."))
}
}
}
}
}
In questo approccio, i miei errori app in fase di esecuzione affermando non ci può essere un solo comprensibilmente UIApplication
. In precedenza, uno poteva rendere MockUIApplication
ereditato da NSObject
e inoltrarlo. Purtroppo il severo controllo di tipo di Swift sembra impedire anche questo.
Mi piacerebbe qualche idea.
Hai mai trovato una soluzione a questo? Ho lo stesso problema adesso. – AnthonyM