unit testing - How to mock UIApplication in Swift? -


i'm using quick + nimble unit testing in swift. i'm building inviter class sends app invites via different methods.

i need mock out uiapplication verify code calls openurl.

my code far:

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 application open whatsapp") {                     expect(mockapplication.openedurl).tonot(benil())                 }                  it("should send whatsapp right message") {                     let message = mockapplication.openedurl?.lastpathcomponent                     expect(message).to(equal("invite%message."))                 }             }         }     } } 

in approach, app errors @ runtime stating there can understandably 1 uiapplication. previously, 1 make mockuiapplication inherit nsobject, , pass in. unfortunately swift's strict type checking seems prevent too.

would love ideas.

you close. use protocol functions need.

protocol uiapplicationprotocol {     func openurl(url: nsurl) -> bool }  extension uiapplication: uiapplicationprotocol {} 

then need use protocol instead of class

extension inviter {     convenience init(usingmockapplication mockapplication: uiapplicationprotocol) {         self.init()         application = mockapplication     } } 

you need modify inviter class use uiapplicationprotocol well.


Comments

Popular posts from this blog

Email notification in google apps script -

c++ - Difference between pre and post decrement in recursive function argument -

javascript - IE11 incompatibility with jQuery's 'readonly'? -