Unit Test๋ ?
๋จ์ ํ ์คํธ, ํน์ ๊ธฐ๋ฅ์ด ์๋ํ๋๋ก ์ ์๋๋๋์ง ์ ๊ฒํ๊ธฐ ์ํด ์์ฑํ๋ ์ฝ๋๋ฅผ ๋งํ๋ค. ๋ฒ๊ทธ์ ๋ํ ๊ฐ๋ฅ์ฑ์ ๋ฎ์ถ๊ณ ์ฝ๋๋ฅผ ๊ฐ์ ํ๊ธฐ ์ํด ์์ฑํ๋ ๊ฒ์ด ์ค์ํ๋ค.
Xcode์์ "Include Test"๋ฅผ ์ ํํ๋ฉด
ํ๋ก์ ํธ์ด๋ฆ-Test, ํ๋ก์ ํธ์ด๋ฆ-UITest ๋๊ฐ๊ฐ ๋ง๋ค์ด์ง๋ค.
๋ง์ฝ ์ฒ์๋ถํฐ ํ ์คํธ ํ ์๊ฐ์ด ์์ด "Include Test" ์ฒดํฌํ์ง ์๊ณ ํ๋ก์ ํธ๋ฅผ ์์ฑํ๋ค๋ฉด ?
์๋ ๊ทธ๋ฆผ์ฒ๋ผ Xcode Test Navigator ํญ์ ํด๋ฆญํ๊ณ unit test target์ ํด๋ฆญํ๋ฉด ํ์ผ์ด ์์ฑ๋๋ค.
์ด์จ๋ ํ์ผ์ ์์ฑํ๊ณ ๋๋ฉด ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ๋ค.
XCTestCase๋ฅผ ์์ ๋ฐ๊ณ ์๋ค.
ํ ์คํธ ์ผ์ด์ค, ๋ฉ์๋๋ฅผ ์ ์ํ๋ ํด๋์ค๋ก ํ ์คํธ๋ฅผ ์ํ ํด๋์ค๋ก ์๊ฐํ๋ฉด ๋ ๊ฑฐ ๊ฐ๋ค.
๋ํ ํ์ผ ์๋
setUpWithError,
tearDownWithError,
testExample,
testPerformanceExample
4๊ฐ์ง ํจ์๊ฐ ์ ๊ณต๋๋ค. ํ๋์ฉ ์ดํด๋ณด์
1. setUp
์ด๊ธฐํ ์ฝ๋๋ฅผ ์์ฑํ๋ ํจ์๋ก ํด๋์ค์ ๊ฐ ํ ์คํธ ํจ์์ ํธ์ถ ์ ์ ํธ์ถ๋๋ ํจ์
setUp() async throws , setUpWithError(), setUp()๊ฐ ์๋ค. ์ด ์ ์ด ๋ฌด์จ ์ฐจ์ด๊ฐ ์์๊น ๋ ์ฐพ์๋ณด๋
ํ .. ๋ฌด์จ ์ฐจ์ด์ธ์ง ์์ง์ ์ ๋ชจ๋ฅด๊ฒ ๋ค ...
ํ์ง๋ง
https://developer.apple.com/documentation/xctest/xctestcase/set_up_and_tear_down_state_in_your_tests
๊ธ์ ์ฐธ๊ณ ํ๋ ์ฐจ์ด์ ์ ์ ์ ์์๋ค.
1) setUp() async throw๋ ๋น๋๊ธฐ์ ์ฒ๋ฆฌ๋ฅผ ์ํจ, 2) setUpWithError()๋ ๋๊ธฐ์ ์ฒ๋ฆฌ + ์๋ฌ ์ฒ๋ฆฌ๋ฅผ ๊ฐ์ด ํ๊ธฐ ์ํจ, 3) setUp()์ ๋๊ธฐ์ ์ฒ๋ฆฌ(์๋ฌ ํธ๋ค๋ง x)์ฉ์ผ๋ก ์ฌ์ฉํ ์ ์๋ ๊ฒ์ด๋ค.
async๋ WWDC 2021์ ์๋กญ๊ฒ ์๊ฐ๋ ๋์์ฑ ์ฒ๋ฆฌ๋ฅผ ์ํ ๋ฌธ๋ฒ์ผ๋ก ์์ง ๊ณต๋ถ ์ค์ธ๋ฐ ๋ ๊ณต๋ถํ๊ณ ๊ธ์ ์จ๋ด์ผ ํ ๊ฑฐ ๊ฐ๋ค.
์ฐธ๊ณ : https://developer.apple.com/videos/play/wwdc2021/10132/
2. tearDown
ํด์ฒด ์ฝ๋๋ฅผ ์์ฑํ๋ ํจ์๋ก ๊ฐ๊ฐ์ ํ ์คํธ ํจ์์ ํธ์ถ ํ์ ํธ์ถ๋๋ ํจ์
๋ง์ฝ ์ฌ์ฉ์ ํ ์คํธ ํจ์์์ ์๋ฌ๊ฐ ๋ฐ์์ tearDown() ํจ์๊ฐ ํธ์ถ๋๋ ๊ฒ์ ๋ณด์ฅํ์ง ์๋๋ค.
tearDown(), tearDownWithError(), tearDown()
๋ง์ฐฌ๊ฐ์ง๋ก
1) tearDown() : ๋๊ธฐ์ ์ฒ๋ฆฌ
2) tearDownWithError() : ๋๊ธฐ + ์๋ฌ ํธ๋ค๋ง
3) tearDown() : ๋น๋๊ธฐ์ ์ฒ๋ฆฌ
๋ง์ฝ ์ฌ์ฉ์ ํจ์ ํธ์ถ ํ ์ฆ์ tearDown() ์ฒ๋ฆฌ๊ฐ ํ์ํ ๊ฒฝ์ฐ
trearDown block ํ์์ผ๋ก ํธ์ถ์ด ๊ฐ๋ฅํ๋ค. block์ last-in, first-out ๊ตฌ์กฐ๋ก ๋ง์ง๋ง์ ์์ฑ๋ ๋ธ๋ญ ๋จผ์ ๋๊ธฐ์ ์ผ๋ก ํธ์ถ๋๋ค.
์ฌ์ฉ์ ํจ์์์ ์๋ฌ ๋ฐ์์, tearDown() ํจ์์ ๋ง์ฐฌ๊ฐ์ง๋ก block์ด ๋ถ๋ฆฌ๋ ๊ฒ์ ๋ณด์ฅํ์ง ์๋๋ค.
3. ์ฌ์ฉ์ ํ ์คํธ ํจ์ : testExample()
test.swift ํ์ผ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ์ฉ์ ํจ์๋ฅผ ๋ง๋ค์ด ์ ๊ณตํ๊ณ ์๋ค. ์ฌ๊ธฐ์ ํ์ํ ํ ์คํธ ๊ธฐ๋ฅ์ ๋ฃ์ด ํ ์คํธ ํ๋ค.
testPerformanceExample() ํจ์๋ ํ ์คํธ ์๊ฐ์ ์ธก์ ํ๋ ์ฝ๋๋ค.
ํ์ผ์ ๊ตฌ์กฐ๋ฅผ ์ดํด๋ณด์๊ณ ์ด์ ์ค์ ์ ์ฉํ ์ฝ๋๋ฅผ ๋ณด๋ฉด์ ๋ค์ ์ ๋ฆฌํด๋ณด์
์ฐ์ ๊ฐ ํด๋์ค๋ค์ ์ด๊ธฐํ ์์ผ์ฃผ์๊ณ ํ ์คํธ๋ฅผ ์ํ DummyRepository๋ฅผ ๋ฐ๋ก ์ค์ ํด ์ฃผ์๋ค.
<DummyCovidRepository.swift>
๋ค์ DataViewModelTests.swift ํ์ผ๋ก ๋์์์
error๊ฐ์ nil์ธ์ง ์๋์ง ํ์ธํด์ค๋ค.
unit test๋ฅผ ์ํ numble, quick ๋ฑ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์๋ค ํ๋๋ฐ
ํ๋ก์ ํธ๊ฐ ์๋ ๊ฐ๋จํด์ ์ ์ฉํ์ง ๋ชปํ๋ค (๋คํธ์ํฌ ํต์ ์ด 3๊ฐ๋ฟ .. ) ๋ค๋ฅธ ํ๋ก์ ํธ์ ๋ค์ ์ ์ฉํด๋ณผ ์๊ฐ์ด๊ณ
async, await (concurrency)๋ ๋ค์ ๊ฐ๋ ์ ์ ๋ฆฌํด๋ณด๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค. ์ด์ ๋๋
'IOS๐ > iOS+Swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift] split, components ์ฐจ์ด (with: ์ฑ๋ฅ) (0) | 2022.04.14 |
---|---|
[Swift] Opaque Type์ด๋ (0) | 2022.04.12 |
[Swift] Access Control (open, public, internal, fileprivate, private) (0) | 2022.03.29 |
[Swift] CustomStringConvertible (0) | 2022.03.07 |
[iOS/swift] ์ ์ฉํ ์ฌ์ดํธ ์ ๋ฆฌ ๋ชจ์.zip (0) | 2021.07.03 |
๋๊ธ