Upgrade to Pro — share decks privately, control downloads, hide ads and more …

TDD using Xcode Playgrounds

TDD using Xcode Playgrounds

CodeMobile 2017 lightning talk

Paul Ardeleanu

April 19, 2017
Tweet

More Decks by Paul Ardeleanu

Other Decks in Programming

Transcript

  1. TDD using Xcode Playgrounds - CodeMobile, April 2017  @pardel

    TDD according to Wikipedia “Test-driven development (TDD) is a software development process that relies on the repetition of a very short development cycle: requirements are turned into very specific test cases, then the software is improved to pass the new tests, only. This is opposed to software development that allows software to be added that is not proven to meet requirements.” https://en.wikipedia.org/wiki/Test-driven_development
  2. TDD using Xcode Playgrounds - CodeMobile, April 2017  @pardel

    Pick a feature to implement making sure it’s a small enough unit. FEATURE Change any of the existing code making sure ALL tests are passing. REFACTOR Write a failing test. Stop as soon as you get a failure. RED Write code to pass the test. Write as little code as possible. GREEN L ( ) TDD lifecycle Feature, Red, Green, Refactor
  3. TDD using Xcode Playgrounds - CodeMobile, April 2017  @pardel

    New feature create test enough code to make it pass successful test execution No anything to refactor Yes Yes refactoring No Ya Ain’t Gonna Need It TDD lifecycle Feature, Red, Green, Refactor
  4. import XCTest class Task { } class TaskTests: XCTestCase {

    func testCanCreateATask() { XCTAssertNotNil(Task()) } }
  5. import XCTest class Task { } class TaskTests: XCTestCase {

    func testCanCreateATask() { XCTAssertNotNil(Task()) } } TaskTests.defaultTestSuite().run()
  6. import XCTest class Task { ... } class TaskTests: XCTestCase

    { ... } TaskTests.defaultTestSuite().run() class TaskManager { ... } class TaskManagerTests: XCTestCase { ... } TaskManagerTests.defaultTestSuite().run() Test Suite 'TaskTests' started at 2017-04-19 11:00:38.804 Test Case '-[__lldb_expr_5.TaskTests testTaskHasAName]' started. Test Case '-[__lldb_expr_5.TaskTests testTaskHasAName]' passed (0.041 seconds). Test Case '-[__lldb_expr_5.TaskTests testTaskMustHaveAName]' started. Test Case '-[__lldb_expr_5.TaskTests testTaskMustHaveAName]' passed (0.005 seconds). Test Suite 'TaskTests' passed at 2017-04-19 11:00:38.851. Executed 2 tests, with 0 failures (0 unexpected) in 0.046 (0.048) seconds Test Suite 'TaskManagerTests' started at 2017-04-19 11:00:38.851 Test Case '-[__lldb_expr_5.TaskManagerTests testCanAddTask]' started. Test Case '-[__lldb_expr_5.TaskManagerTests testCanAddTask]' passed (0.010 seconds). Test Case '-[__lldb_expr_5.TaskManagerTests testHasTasks]' started. Test Case '-[__lldb_expr_5.TaskManagerTests testHasTasks]' passed (0.001 seconds). Test Suite 'TaskManagerTests' passed at 2017-04-19 11:00:38.862. Executed 2 tests, with 0 failures (0 unexpected) in 0.011 (0.011) seconds