読者です 読者をやめる 読者になる 読者になる

XCode を使わず Swift で TDD しながら FizzBuzz を書いてみた

swift tdd docker

この前作った Swift の環境 で勉強として FizzBuzz を書いてみた。

github.com

パッケージの作り方

$ mkdir FizzBuzz
$ cd FizzBuzz
$ swift package init

コード

// Sources/app/FizzBuzz.swift
class FizzBuzz {
    let num : Int

    init(num : Int) {
        self.num = num
    }

    func toString() -> String {
        switch self.num {
            case let n where n % 15 == 0:
                return "FizzBuzz"
            case let n where n % 3 == 0:
                return "Fizz"
            case let n where n % 5 == 0:
                return "Buzz"
            default:
                return String(self.num)
        }
    }
}
// Tests/app/FizzBuzzTests.swift
import XCTest
@testable import app

class FizzBuzzTests: XCTestCase {
    func testThree() {
      let fizzBuzz = FizzBuzz(num: 3)
      XCTAssertEqual(fizzBuzz.toString(), "Fizz")
    }

    func testFive() {
      let fizzBuzz = FizzBuzz(num: 5)
      XCTAssertEqual(fizzBuzz.toString(), "Buzz")
    }

    func testFifteen() {
      let fizzBuzz = FizzBuzz(num: 15)
      XCTAssertEqual(fizzBuzz.toString(), "FizzBuzz")
    }

    func testOther() {
      let fizzBuzz = FizzBuzz(num: 1)
      XCTAssertEqual(fizzBuzz.toString(), "1")
    }

    static var allTests : [(String, (FizzBuzzTests) -> () throws -> Void)] {
        return [
            ("testThree", testThree),
            ("testFive", testFive),
            ("testFifteen", testFifteen),
            ("testOther", testOther)
        ]
    }
}

テストの実行方法

$ swift build
$ swift test