I am working in swift, I want to refresh a page so I am sending it using notification, I am posting a notification in one ViewController and adding observer in another and it is working perfectly. What I want to do is add unit test to it in swift. I checked many sites but was not able to do it. I am new to swift and don't know where to start.
Basically the working is, when i click the button notification is posted and when the next view controller is loaded the notification observer is added.
How can I do the unit testing
Thanks in advance
Edit: Code
NSNotificationCenter.defaultCenter().postNotificationName("notificationName", object: nil)
and adding observer as
NSNotificationCenter.defaultCenter().addObserver(self, selector: "vvv:",name:"notificationName", object: nil)
The general solution is: Use dependency injection (DI) to make your components unit-testable. You can choose use a DI framework (I don't know if there is any good framework for Swift exists yet) or use native approach (i.e. pass object around)
One possible approach for your problem is to wrap
NSNotificationCenter
to make it mockable/injectable.This is just a basic idea how you can decouple dependencies. Please don't just copy & paste the code below and expect it to work without understanding it.
XCTest
has a class specifically for testing Notifications:XCTNSNotificationExpectation
. You create one of these expectations, and it's fulfilled when a notification is received. You'd use it like:XCTestCase
'sexpectation(forNotification:object:handler:)
is a convenience method to create an instance ofXCTNSNotificationExpectation
, but for more control, you could instantiate one and configure it yourself. See the docs.