Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save ccabanero/b92197516342c0147688 to your computer and use it in GitHub Desktop.
Save ccabanero/b92197516342c0147688 to your computer and use it in GitHub Desktop.
Sample iOS Unit Tests: Working with a ViewController composed of a UIButton
import XCTest
@testable import projectname
class ExampleTests: XCTestCase {
var viewControllerUnderTest: MyViewController!
override func setUp() {
super.setUp()
let storyboard = UIStoryboard(name: "Main", bundle: nil)
self.viewControllerUnderTest = storyboard.instantiateViewControllerWithIdentifier("MyViewController") as! MyViewController
self.viewControllerUnderTest.loadView()
self.viewControllerUnderTest.viewDidLoad()
}
func testViewControllerUnderTestIsComposedOfButton() {
XCTAssertNotNil(self.viewControllerUnderTest.button, "Does not have a button")
}
func testButtonInvokesActionMethodWhenTapped() {
let actionMethod = self.viewControllerUnderTest.button.actionsForTarget(self.viewControllerUnderTest, forControlEvent: UIControlEvents.TouchUpInside)
let actualMethodName = actionMethod?.first
let expectedMethodName = "handleTap:"
XCTAssertEqual(actualMethodName, expectedMethodName, "Actual: \(actualMethodName) not equal to expected: \(expectedMethodName)")
}
func testViewControllerUnderTestIsComposedOfLabel() {
XCTAssertNotNil(self.viewControllerUnderTest.label, "Does not have label")
}
func testLabelAfterButtonTap() {
let button: UIButton = UIButton()
viewControllerUnderTest.handleTap(button)
// alterantively tap button with
// viewControllerUnderTest.button.sendActionsForControlEvents(UIControlEvents.TouchUpInside)
let expectedLabelText = "Hello testing"
let actualLabelText = viewControllerUnderTest.label.text
XCTAssertEqual(expectedLabelText, actualLabelText, "Label text of: \(expectedLabelText) not equal to text: \(actualLabelText)")
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment