Bibi's DevLog ๐ค๐
TDD, ๋จ์ ํ ์คํธ, XCTest๋ก iOS ์ฑ ํ ์คํธํ๊ธฐ ๋ณธ๋ฌธ
TDD, ๋จ์ ํ ์คํธ
- ํ ์คํธ ๋ฉ์๋๊ฐ private์ด๋ฉด ๋ฌด์กฐ๊ฑด ์ฑ๊ณต์ผ๋ก ๋์ค๋ ์กฐ์ฌํ์..
https://velog.io/@minni/TDD%EC%99%80-Swift-XCTest-%ED%99%9C%EC%9A%A9%ED%95%98%EA%B8%B0
- TDD : Test Driven Development
- ๊ธฐ์กด์ ์ค๊ณ -> ๊ฐ๋ฐ -> ํ ์คํธ ๊ฐ ์๋, ์ค๊ณ -> ํ ์คํธ -> ๊ฐ๋ฐ ์ ์์๋ก ์์
- ์ค๊ณ ๋ฌธ์ ๋ก ์ธํ ์ค๋ฅ๋ฅผ ๋น ๋ฅด๊ฒ ์ก์๋ผ ์ ์๋ค.
- TDD์ ์ฅ์
- ๋๋ฒ๊น ์๊ฐ์ ๋จ์ถํ ์ ์๋ค.
- ๊ฐ์ฒด์งํฅ์ ์ค๊ณ๊ฐ ๊ฐ๋ฅํ๋ค. ์ ์ง๋ณด์๊ฐ ๊ฐ๋ฅํ๋ค.
- ํ ์คํธ๋ฅผ ์๋ํํ๊ณ ํ ์คํธ ๋ฌธ์๋ก ์ผ์ ์ ์๋ค.
- Red, Green, Blue / Triple A (Arrange, Act, Assert)
- ๋งค ๊ตฌํ ๋จ๊ณ๋ง๋ค Red - Green - Blue ๋ฅผ ๋ฐ๋ณตํ๋ฉฐ ๊ฐ๋ฐํ๋ค.
- Red : ์คํจ. ์คํจํ๋ ํ ์คํธ ์ผ์ด์ค ์์ฑํ๊ธฐ
- Green : ์ฑ๊ณต. ์คํจํ๋ ํ ์คํธ ์ผ์ด์ค๋ฅผ ์ฑ๊ณต์ํค๊ธฐ ์ํ ์ต์ํ์ ์ฝ๋ ์์ฑํ๊ธฐ
- Blue : ๋ฆฌํฉํ ๋ง. ์ฑ๊ณตํ ํ ์คํธ ์ผ์ด์ค๋ฅผ ๋ฆฌํฉํ ๋งํ๊ธฐ.
- ๋จ์ํ
์คํธ : Unit Test
- ๊ธฐ๋ฅ ๋จ์์ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒ.
- ์ฆ ๋ชจ๋ ๊ธฐ๋ฅ(๋ฉ์๋)์ ๋ํ ํ ์คํธ์ผ์ด์ค๋ฅผ ์์ฑํ๋ ์ ์ฐจ๋ฅผ ๋งํจ.
- ๋จ์ํ
์คํธ์ ์ฅ์
- ์ฝ๋ ๋ณ๊ฒฝ์ผ๋ก ์ธํ ๋๋ฒ๊น ์ ๋น ๋ฅด๊ฒ ํด ์ค๋ค.
- ๋จ์ํ ์คํธ๋ฅผ ๋ฏฟ๊ณ ๋ฆฌํฉํ ๋ง์ ํธํ๊ฒ ํ ์ ์๊ณ , ๋ฆฌํฉํ ๋ง ํ ๋จ์ํ ์คํธ๋ก ์ฌ๊ฒ์ฆ์ด ๊ฐ๋ฅํ๋ค.
- FIRST : ์ข์ ๋จ์ํ
์คํธ ์์ฑ ์์น
- Fast : ๋น ๋ฅธ. ํ ์คํธ๋ ๋น ๋ฅด๊ฒ ์คํ๋์ด์ผ ํจ
- Isolated : ๋ ๋ฆฝ๋. ํ ์คํธ๋ ๋ฐ๋ก ์ค์ ์ด๋ ๋ถ๋ฆฌ๋ฅผ ํด์๋ ์ ๋จ
- Repeatable : ๋ฐ๋ณต ๊ฐ๋ฅํ. ํ ์คํธ๋ฅผ ๋ฐ๋ณต ์ํํด๋ ๊ฐ์ ๊ฒฐ๊ณผ์ฌ์ผ ํ๋ค.
- Self-validating : ์์ฒด ๊ฒ์ฆ. ํ ์คํธ๋ ์์ ํ ์๋ํ๋์ด์ผ ํ๋ค. ํ ์คํธ ๊ฒฐ๊ณผ๋ฅผ ๋ ํด์ํ ํ์ ์์ด, pass ๋๋ fail์ ์ถ๋ ฅํ๊ฒ ํ๋ค.
- Timely : ์ ์์. ํ ์คํธ ์ฝ๋๋ ๊ฐ๋ฐ ์ ์ ์์ฑํด์ผ ํ๋ค.
XCTest ๋ก iOS ์ฑ ํ ์คํธํ๊ธฐ - Test Navigator
https://www.raywenderlich.com/21020457-ios-unit-testing-and-ui-testing-tutorial
- ํ
์คํธ๋ ๋ฌด์์ ํ
์คํธํด์ผ ํ๋๊ฐ?
- ํต์ฌ ๊ธฐ๋ฅ - ๋ชจ๋ธ ํด๋์ค๋ค๊ณผ ๋ฉ์๋๋ค, ์ปจํธ๋กค๋ฌ์์ ์ํธ์์ฉ
- UI ์์ ํ๋ฆ
- ๊ฒฝ๊ณ ์กฐ๊ฑด
- ๋ฒ๊ทธ ํด๊ฒฐ
์ ๋ ํ ์คํธ ๋ง๋ค๊ธฐ
- XCode ํ๋ก์ ํธ์์ command + 6์ ์ ๋ ฅํด ํ ์คํธ ๋ค๋น๊ฒ์ดํฐ๋ฅผ ์ฐ๋ค.
- New Unit Test Target ์ ํ
ํ๋ก์ ํธ๋ช + Tests
์ด๋ฆ์ ํด๋์ค๊ฐXCTest
๋ฅผ import ํ๊ณ ,XCTestCase
๋ฅผ ์์๋ฐ์ ์ฑ๋ก ์์ฑ๋จsetUpWithError()
,tearDownWithError()
๋ผ๋ ์ค๋ฒ๋ผ์ด๋ฉ ๋ฉ์๋ ์๋ ์์ฑ- ์์ ํ
์คํธ ๋ฉ์๋์ธ
testExample()
,testPerformanceExample()
์๋ ์์ฑ
- ํ ์คํธ ์คํํ๊ธฐ : Command + U (์ ์ฒด ์คํ), ๋ค์ด์๋ชฌ๋ ๋ฒํผ ๋๋ฅด๊ธฐ(๊ฐ๋ณ ์คํ)
- Performance Result ํ์ธํ๊ธฐ : ํ์ ๋ค์ด์๋ชฌ๋ ๋ฒํผ ๋๋ฅด๊ธฐ
๋ชจ๋ธ ํ ์คํธ๋ฅผ ์ํด XCTAssert ์ฌ์ฉํ๊ธฐ
import XCTest
@testable import PokerGameApp // ๊ธฐ๋ฅ์ ํ
์คํธํ ๋ชจ๋ธ ๊ฐ์ ธ์ค๊ธฐ - ๋ชจ๋ธ์ ๋ด๋ถ ํ์
๊ณผ ๋ฉ์๋์ ์ ๊ทผ ๊ฐ๋ฅํ๊ฒ ํจ
class PokerGameAppTests: XCTestCase {
var systemUnderTest: PokerGame! // System Under Test
override func setUpWithError() throws {
// Put setup code here. This method is called before the invocation of each test method in the class.
try super.setUpWithError()
systemUnderTest = PokerGame(playerNames: ["A", "B"]) // ํ
์คํธํ ๊ฐ์ฒด ์์ฑ
// SUT๋ setUpWithError()์์ ๋ง๋ค๊ณ , tearDownWithError()์์ ํด์ ํ๋ ๊ฒ์ด ์ข๋ค.
}
override func tearDownWithError() throws {
// Put teardown code here. This method is called after the invocation of each test method in the class.
systemUnderTest = nil // ํ
์คํธํ ๊ฐ์ฒด ๋ฆด๋ฆฌ์ฆ
try super.tearDownWithError()
}
}
import XCTest
์๋์ ๊ธฐ๋ฅ์ ํ ์คํธํ ๋ชจ๋ธ์ ๊ฐ์ ธ์จ๋ค.@testable import ๋ชจ๋ธ๋ช
PokerGameAppTests์ ํ๋กํผํฐ๋ก
var systemUnderTest: ํ ์คํธํ ๊ฐ์ฒด
๋ฅผ ์ ์ธํ๋ค.- SUT(System Under Unit) : ํ ์คํธ ์ผ์ด์ค ํด๋์ค๊ฐ ํ ์คํธํ ๊ฐ์ฒด๋ฅผ ๋งํจ
SUT๋ setUpWithError()์์ ๋ง๋ค๊ณ , tearDownWithError()์์ ํด์ ํ๋ ๊ฒ์ด ์ข๋ค.
setUpWithError()
์ ์๋ ์ฝ๋๋ฅผ ์ถ๊ฐํ๋ค.try super.setUpWithError() systemUnderTest = PokerGame()
ํ ์คํธํ ๊ฐ์ฒด๋ฅผ ํด๋์ค ์์ค์์ ์์ฑํด, ํ ์คํธ ํด๋์ค์ ๋ชจ๋ ํ ์คํธ๊ฐ SUT ๊ฐ์ฒด์ ํ๋กํผํฐ์ ๋ฉ์๋์ ์ ๊ทผํ ์ ์๋๋ก ํ๋ค.
set up = ์ค๋ฆฝํ๋ค
tearDownWithError()
์ ์๋ ์ฝ๋๋ฅผ ์ถ๊ฐํ๋ค.systemUnderTest = nil try super.tearDownWithError()
SUT ๊ฐ์ฒด๋ฅผ ๋ฆด๋ฆฌ์ฆํ๋ ์์ ์ด๋ค.
tear down = ํด์ฒดํ๋ค
ํ ์คํธ ์ผ์ด์ค ์์ฑํ๊ธฐ - Given, When, Then
- ํ ์คํธ ๋ฉ์๋ ์ด๋ฆ : ํญ์ test๋ก ์์ํ๊ณ , ๋ฌด์์ ํ ์คํธํ๋์ง์ ๋ํด ์ค๋ช ํด์ผ ํ๋ค.
- ํ
์คํธ ๋ฉ์๋๋ given, when, then ๋ถ๋ถ์ผ๋ก ๋๋์ด ์์ฑํ๋ ๊ฒ์ด ์ข๋ค.
- Given : ํ ์คํธ์ ํ์ํ ๊ฐ์ ์ค์ ํ๋ ๋ถ๋ถ.
- When : ํ ์คํธํ ์ฝ๋๋ฅผ ์คํํ๋ ๋ถ๋ถ. ์๋ฅผ ๋ค์ด ๋ฉ์๋๋ฅผ ์คํํจ
- Then : ํ
์คํธ์ ๊ธฐ๋๋๋ ๊ฒฐ๊ด๊ฐ์ ๋จ์ ํ๋ ๋ถ๋ถ - ์คํจ ์ ๋ฉ์์ง๋ฅผ ์ถ๋ ฅํจ.
XCTAssert...
๋ฉ์๋๋ฅผ ํ์ฉํ๋ค.- ์ฐธ๊ณ : XCTestAssertions ๊ณต์ ๋ฌธ์
- ํ
์คํธ ๋๋ฒ๊น
: ์คํจํ๋ ํ
์คํธ ๋๋ฒ๊น
ํ๊ธฐ
- ์คํจํ๋ ํ ์คํธ๋ฅผ ๋ง๋ค์ด ๋๋ค.
- Test Failure Breakpoint๋ฅผ ๋ง๋ค์ด ์ด๋์์ ์คํจํ๋์ง ๋๋ฒ๊น
ํ ์ ์๋ค.
- ํ ์คํธ ๋ฉ์๋์์ ์คํจ Assertion์ด ๋ฐ์ํ์ ๋ ํ ์คํธ ์คํ์ ๋ฉ์ถ๋ค.
- ์ดํ Xcode ๋๋ฒ๊ฑฐ๋ก ํ์์ฒ๋ผ ๋๋ฒ๊น ์ ํ๋ฉด ๋๋ค.