Şu anda Swift'deki birim testlerim için Quick + Nimble kullanıyorum. Uygulama davetlerini farklı yöntemlerle gönderen bir Inviter
sınıfı yapıyorum.Swift'de UIApplication ile nasıl alay edilir?
Kodumun openURL
çağrılarını doğrulamak için UIApplication'ı dağıtmam gerekiyor. Bugüne kadar
Benim kod: Bu yaklaşımda
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."))
}
}
}
}
}
belirterek zamanında benim uygulama hataları anlaşılır tek UIApplication
olabilir. Önceden, bir NSObject
dan MockUIApplication
kaliteyi yapabilir ve bunu iletebilir. Maalesef Swift'in sıkı tip denetimi de bunu engelliyor gibi görünüyor.
Fikirlere bayılırım.
Buna bir çözüm buldunuz mu? Şu anda aynı problemim var. – AnthonyM