코드를 기능단위로 잘 분리를 해야만 테스트를 잘할 수 있음.
→ 작은 실패를 반복해서 원하는 골로 향한다.
리팩터란? 흐름 안에 있는 코드의 모양새를 바꾸는 것
더하기 연산 함수를 실행했을 때 1+1을 더해서 2가 나오는지?
테스트 하면서 확인하는게 테스트 코드!
하나의 메서드 안에 모든 기능 다 때려넣음
그러면 어떤 코드가 문제가 되는지 파악하기 힘듦!
스텍을 가지고 테스트 코드 작성한다.
Pop 메서드를 테스트하고 싶음
스텍은 애초에 비어있기 때문에
push를 한 다음에 pop을 하는 테스트 했음
만약에 push를 못하면 pop도 못함
push라는 메소드에 의존하고 있는 pop 테스트하는 거임
순수하게 pop만 테스트할 수 있는 코드를 작성해야 함
import Foundation
class Queue {
var arr: Array<String> = []
func enqueue(_ item: String) -> Array<String> {
arr.append(item)
return arr
}
func enqueMultipleItems(_ items: Array<String>) -> Array<String> {
for item in items {
arr.append(item)
}
return arr
}
func dequeue() -> Array<String> {
arr.removeFirst()
return arr
}
func dequeueMultipleItems(num: Int) -> Array<String> {
for _ in 1...num {
arr.removeFirst()
}
return arr
}
func removeAllItem() -> Array<String> {
arr = [] // 모든 아이템을 지워주려면 그냥 빈 배열로 만들어버리면 된다.
return arr
}
}
import XCTest
@testable import queue
class testQueue: XCTestCase {
var queue: Queue? // queue 프로퍼티는 Queue클래스를 상속받음?
override func setUpWithError() throws {
queue = Queue()
try super.setUpWithError()
}
override func tearDownWithError() throws {
try super.tearDownWithError()
}
func test_enqueue() {
XCTAssertEqual(queue.enqueue("yun"), ["yun"])
// Queue 클래스의 enqueue 메소드를 실행해서 yun을 입력했을떄 결과 값이 yun이 제대로 나오는지 테스트
}
}
출처:
"TDD 실천법과 도구" 책 전체를 PDF 공개합니다. https://repo.yona.io/doortts/blog/issue/1
TDD (Test Driven Development) 란? https://velog.io/@sbyeol3/TDD-Test-Driven-Development-란
import UIKit
public struct Stack<T> {
private var elements = [T]()
public init() {}
public mutating func push(_ element: T) {
self.elements.append(element)
}
public mutating func pop() -> T? {
return self.elements.popLast()
}
public func peek() -> T? {
return self.elements.last
}
public func isEmpty() -> Bool {
return self.elements.isEmpty
}
public var count: Int {
return self.elements.count
}
}
var myStack = Stack<Int>()
myStack.isEmpty()
myStack.push(1)
print(myStack)
myStack.isEmpty()
myStack.push(2)
print(myStack)
myStack.count
myStack.peek()
myStack.pop()
print(myStack)