ํ์ฌ ์ฐ๋ฆฌ์ ํ ์คํธ๋ ํ ์คํธ ๋ณธ๋ฌธ์ ์ค๋ช ํ๊ธฐ ์ํด ์ํฌ๋ฅธ 4๋จ๊ณ ํ ์คํธ ์คํ์ผ์ ๋ฐ๋ฆ ๋๋ค. xUnit๊ณผ ์ ์ด์ธ๋ฆฌ์ง ์๋ ๊ตฌ์ ๋ฌผ๊ฑด์ฒ๋ผ ๋ณด์ด๊ธฐ ๋๋ฌธ์ ์ ํ ๋ง์์ ๋ค์ง ์์ต๋๋ค. ๋ด ๊ด์ฌ์ฌ:
// Teardown
๋จ๊ณ๋ restore
ํ์ ์์ด ํ
์คํธ๋น sut
์์ฑํ๋ฏ๋ก xUnit ํ
์คํธ์์ ํญ์ ๋น์ด ์์ต๋๋ค.// Fixture setup
, // Exercise System
๋ฐ // Verify Outcome
๋ ๋๋ฌด ์ฅํฉํด ๋ณด์ด์ง๋ง // arrange
, // act
๋ฐ // assert
๋ ๋ ๊ฐ๊ฒฐํฉ๋๋ค. ํ
ํ๋ฆฟ์์ ํ
์คํธ๋ฅผ ์์ฑํ์ง ์์ผ๋ฉด ํด๋น ๋จ์ด๋ฅผ ์์ฑํ๋ ๊ฒ์ด ํจ์ฌ ๊ฐ๋จํฉ๋๋ค(์คํ ์์ด exercise
๋ฅผ ์์ฑํ๋ ๊ฒ์ ํญ์ ์ด๋ ต์ต๋๋ค ๐
).๋ฐ๋ผ์ @moodmosaic ๊ฐ๋ ฅํ ์ด์๊ฐ ์๋ค๋ฉด(์์ผ๋ฉด ์ข๊ฒ ์ต๋๋ค) 3๋จ๊ณ ํ ์คํธ๋ก ์ ํํ์ฌ ๋ชจ๋ ํ ์คํธ์ ์ฌ์ฉํ๊ณ ์ถ์ต๋๋ค. ํ ์คํธ๋ฅผ ๋ง๋๋ ๊ณผ์ ์์ ๊ณ ํต๋ณด๋ค๋ ๋ง์กฑ๊ฐ์ ๋๋ ์ ์์ ๊ฑฐ์์ ๐
๊ทธ๊ฒ์ ์ํด ๊ฐ์ญ์์ค. ๊ทธ๋ฌ๋ ๋๋ ์ฒซ ๊ธ์๋ฅผ ๋๋ฌธ์๋ก ์ฌ์ฉํ๋ ๊ฒ์ ์ ํธํฉ๋๋ค.
// Arrange
// Act
// Assert
๋์ ์
// arrange
// act
// assert
๋ ๋ฒ์งธ ๊ฒฝ์ฐ๋ฅผ ์ ํธํ๋ ๊ฐ๋ ฅํ ์ด์ ๊ฐ ์์ต๋๊น?
์๋์, ๋๋ฌธ์๋ ๊ด์ฐฎ์ต๋๋ค. AAA๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ผ๋ก ์ถฉ๋ถํฉ๋๋ค.:blush:
๊ฐ ๋จ๊ณ๋ฅผ ๋น ์ค๋ก ๊ตฌ๋ถํ ์๋ ์์ต๋๋ค. ์ด๋ ์ ๊ฐ ์์ฆ ์ฌ์ฉํ๋ ํ์์ ๋๋ค. ๊ทธ๋ฐ ๋ค์ ํ ์คํธ ๋ฆฌ๋๋ ๊ทธ๊ฒ์ด Given/When/Then ๋๋ Arrange/Act/Assert ๋๋ ์ฌ์ง์ด (4๋จ๊ณ๊ฐ ์ฌ๊ธฐ์ ์์) ์ด๋ผ๊ณ ๊ฐ์ ํ ์ ์์ต๋๋ค.
๋น์ ์ "์ฝ๋๋ณด๋ค 3 ์ ๊ฐ๋จํ ํ ์คํธ๋ฅผ"์น์ ์์ ๋ ์ด๊ฒ์ ๋ํด ์ฝ์ ์ ์์ต๋๋ค ์ฌ๊ธฐ์ .
์ ๋ OSS์์ ์ฃผ์ ๋์ ๋น ์ค์ ์ฌ์ฉํ๋ ๊ฒ์ ๋งค์ฐ ์ซ์ดํ๊ณ Marks ์์ด๋์ด์ ๋์ํ์ง ์์ต๋๋ค. ์ฌ๊ธฐ ๋ด ์๊ฒฌ์ ์ฐธ์กฐ
๊ฐ ํ ์คํธ ๋จ๊ณ ์์ ์๋ ์ฃผ์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ๊ณผ ์ ๋๋ค . ์๋ํ๋ฉด ๊ทธ๋ค์ ์ด์ ๋์ ์ ๋ฐฉ๋ฒ ์ ์ค๋ช ํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ด์ AutoFixture๋ก ๋์๊ฐ์ ๋ชจ๋ ํ ์คํธ๊ฐ ์ฃผ์์ผ๋ก ์ฅ์๋์ด ์๊ณ ์กฐ๋ช ๊ธฐ ๋ถํด ๋จ๊ณ๊ฐ ๊ฑฐ์ ํญ์ ๋น์ด ์๊ธฐ ๋๋ฌธ์ ๊ณ์ ์งํํ์ฌ AAA๋ก ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ด ํน๋ณํ ๊ฒฝ์ฐ์๋ ์ฌ๊ณผ์ ๋๋ค.
๊ธ์, ๋๋ ๋ํ ์ด ๊ท์น์ ์์ฃผ ์ธ๊ธํ์ง๋ง, ์ด ํน๋ณํ ๊ฒฝ์ฐ์๋ "์ฌ๊ณผ"๋ฅผ ์ ์งํ๋ ๊ฒ์ ์ ํธํฉ๋๋ค. ๐ ํ ์คํธ ๊ตฌ์กฐ๋ฅผ ๋ ๋ช ํํ๊ณ ์๊ฒฉํ๊ฒ ๋ง๋ญ๋๋ค. ๊ฐ์ธ์ ์ผ๋ก "๋ ์ด๋ธ์ด ์๋" ํ ์คํธ๋ฅผ ์ฝ๋ ๊ฒ์ด ๋ ์ฝ๋ค๊ณ ์๊ฐํ์ง๋ง ์๋ง๋ ๊ทธ๊ฒ์ ๋จ์ํ ์ต๊ด์ ๋ฌธ์ ์ผ ๊ฒ์ ๋๋ค ๐
ํ์ง๋ง ์๋ง๋ ๊ทธ๊ฒ์ ๋จ์ํ ์ต๊ด์ ๋ฌธ์ ์ผ ๊ฒ์ ๋๋ค
์ด๊ฒ; ๊ทธ๋ฆฌ๊ณ ์๋ง๋ ๋๊ฐ ์ค์ ๋ก ํ ์คํธ๋ฅผ ์์ฑํ๋์ง์ ๋ฌธ์ ์ผ ์๋ ์์ต๋๋ค.
์๋
ํ์ธ์, ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ ์ถ์ต๋๋ค. ์ ๋ Autofixture์ ์ด๋ ฌํ ํฌ์ด๋ฉฐ ํญ์ ์ ์์
์ ์ฌ์ฉํ๋ฉฐ ๋ณด๋ตํ๋ ์ข์ ๋ฐฉ๋ฒ์ด ๋ ๊ฒ์
๋๋ค.
๋ฐ๋ผ์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ชจ๋ ํ
์คํธ ํ์ผ์์ ๋ค์์ ๋ณ๊ฒฝํ๋ ค๊ณ ํฉ๋๋ค.
// Fixture setup
~ // Arrange
// Exercise System
~ // Act
// Verify Outcome
~ // Assert
๊ทธ๋ฆฌ๊ณ ๋ง์นจ๋ด // Teardown
๋ ์๋ฌด๊ฒ๋ ์๋๋๋ค.
์, ํ์ง๋ง ์ผ๋ถ ํ ์คํธ์์๋ ์ผ๋ถ ๋จ๊ณ๊ฐ ํจ๊ป ๊ฒฐํฉ๋๋ฏ๋ก '์ฐพ๊ธฐ ๋ฐ ๋ฐ๊พธ๊ธฐ'๋ฅผ ์ํํ๋ ๊ฒ์ด ์๋ํ์ง ์์ ์ ์์์ ๋ช ์ฌํ์ญ์์ค. ์ฆ, ์ด๋ ์์คํ ๋ฐ ๊ฒฐ๊ณผ ํ์ธ ๊ณผ ์ ์ฌํ IIRC๋ฅผ ์ ํ ์ ์์ต๋๋ค.
@moodmosaic ์ดํดํฉ๋๋ค. ์ ์ฒด '์ฐพ๊ธฐ ๋ฐ ๋ฐ๊พธ๊ธฐ'๊ฐ ์๋ ํ์ผ๋ณ๋ก ์ํํ ๊ณํ์ด์ง๋ง ๋ ๋ถ๋ช ํ๊ณ ๊ฐ๋จํ ๊ฒฝ์ฐ์๋ ์ฌ์ ํ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๊ฐ์ฌํฉ๋๋ค,
์์ด์ฌ
// Exercise system and verify outcome
๋ํ @moodmosaic ์ ๋ค์์ผ๋ก ๋์ฒด๋์ด์ผ ํฉ๋๋ค.
// Act and Assert
์๋๋ฉด ๋ค๋ฅธ ์๊ฐ์ ํ๊ณ ๊ณ์ ๊ฐ์?
์ ๋ ๋ณดํต // Act & Assert
๋ฅผ ์ฌ์ฉํ๋๋ฐ ๋ ๊ฐ๊ฒฐํ๊ณ ๋ฉ์์ด ๋ณด์
๋๋ค ๐ @moodmosaic ์ด ๊ฑฑ์ ๋์ง ์๋ ํ ๊ทธ ์คํ์ผ์ ๋ฐ๋ฅด๊ณ ์ถ์ต๋๋ค ๐
์ด๋ ์ชฝ์ด๋ OK:neckbeard:
๊ทธ๋์ ์ด๊ฒ๋ถํฐ ์์ํ๋ ค๊ณ ํ๊ณ VS 2017์์ All.sln์ ๋ก๋ํ ํ ๋ ๊ฐ์ F# ํ๋ก์ ํธ
( AutoFoq,AutoFoqUnitTest ) ์ด๋ฆฌ์ง ์์ต๋๋ค. F#์ ๋ํ ๊ฒฝํ์ด ์ ํ ์์ผ๋ฏ๋ก ๋์์ ์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค.
@micheleissa ์ต์ ๋ฒ์ ์ VS(15.5.1 ์ด์)๋ฅผ ์ฌ์ฉํ๊ณ ์๋์ง ํ์ธํ์ธ์. ๊ทธ๋ ์ง ์์ผ๋ฉด ํ๋ก์ ํธ๊ฐ ์ด๋ฆฌ์ง ์์ต๋๋ค(MS๊ฐ F# SDK์ ๋ณ๊ฒฝ ์ฌํญ์ ์ ์ฉํจ). ๋ํ ๋ซํ VS๊ฐ ์๋ ๋ฃจํธ์์ git clean -fdx .
๋ฅผ ์คํํด์ผ ํฉ๋๋ค. ์ด์ ์ ํ๋ก์ ํธ๋ฅผ ์ฒดํฌ์์ํ ๊ฒฝ์ฐ์ ๋๋นํ์ฌ ์์ ํ์ผ์ ์ ๋ฆฌํ๋ ๊ฒ์
๋๋ค.
๋ ๋จ๊ณ ๋ชจ๋ ๋์์ด ๋ฉ๋๋ค. ๊ทธ๋ค์ดํ์ง ์์๋ค๋ฉด ์๋ ค์ฃผ์ญ์์ค ๐
@zvirja ์ต์ ๋ฒ์ ์ VS 2017 15.5.2๋ก ์
๊ทธ๋ ์ด๋ํ์ง๋ง ์ฌ์ ํ ๋์ผํ ๋ฌธ์ ์ ์ง๋ฉดํ๊ณ ์์ต๋๋ค ๐
๋ ๋ฒ์งธ ๋ถ๋ถ์ ์๋ ํ์ต๋๊น?
master
git clean -fdx .
์ด์ SDK์์ ๋จ์ํ ๋จ์ ๊ฒ ๊ฐ์ต๋๋ค.
๋ํ ์ปดํจํฐ์ F# ๋๊ตฌ๊ฐ ์ค์น๋์ด ์๋์ง ํ์ธํฉ๋๋ค.
์, ๋ ๋ฒ์งธ๋ฅผ ์์ด ๋ฒ๋ ธ์ต๋๋ค ์ฃ์กํฉ๋๋ค :)
์ง๊ธ ํด๋ณผ๊ฒ์
@zvirja ์๋ํ์ต๋๋ค. ๋์์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค!
์ง๋ฌธ์ด ํ๋ ๋ ์์ต๋๋ค. ๋ถ๊ธฐ๋ ์ ์ฅ์์์ ์์ ์ค์ธ ์ง์ ์ ์ด ํฐ์ผ์ ์ฐ๊ฒฐํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํฉ๋๊น?
ํจ๊ณผ๊ฐ ์ข์๋ค! ๐
๋ถ๊ธฐ๋ ์ ์ฅ์์์ ์์ ์ค์ธ ์ง์ ์ ์ด ํฐ์ผ์ ์ด๋ป๊ฒ ์ฐ๊ฒฐํฉ๋๊น?
์ด ๊ธฐ์ฌ๋ฅผ ๋ณด๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ํฌํ๋ก๊ฐ ์ ์ค๋ช ๋์ด ์์ต๋๋ค. https://github.com/sevntu-checkstyle/sevntu.checkstyle/wiki/Development-workflow-with-Git :-Fork,-Branching,- ์ปค๋ฐ ๋ฐ ํ ์์ฒญ
๊ธฐ๋ณธ์ ์ผ๋ก ์ด ๋ฌธ์ ์ ๋ถ๊ธฐ๋ฅผ ์ฐ๊ฒฐํ ํ์๊ฐ ์์ต๋๋ค. ์คํ๋ ค, ๋น์ ์ ๋์ด ์ค๊ธฐ ์์ฒญ์ ์์ฑํ๊ณ ๊ฐ๋จํ๊ฒ (์๋ฅผ ๋ค์ด, ์ฐธ์กฐ ๋ชธ์์ด ๋ฌธ์ ๋ฅผ ์ธ๊ธ ์ด ํ๋).
์๊ฒ ์ต๋๋ค. ๊ฐ์ฌํฉ๋๋ค! ์ฌ๋ฌ๋ถ์ด ์งํ ์ํฉ์ ๋ชจ๋ํฐ๋งํ๊ณ ๊ธฐ์ฌ ์ง์นจ์ ์ธ๊ธ๋ ๋ด์ฉ์ ๋ฐ๋ผ ํผ๋๋ฐฑ์ ์ ๊ณตํ ์ ์๋๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋์ ํ ์์ฒญ์ ๋ง๋ค ๊ฒ์ ๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ ๋ ๋ณดํต
// Act & Assert
๋ฅผ ์ฌ์ฉํ๋๋ฐ ๋ ๊ฐ๊ฒฐํ๊ณ ๋ฉ์์ด ๋ณด์ ๋๋ค ๐ @moodmosaic ์ด ๊ฑฑ์ ๋์ง ์๋ ํ ๊ทธ ์คํ์ผ์ ๋ฐ๋ฅด๊ณ ์ถ์ต๋๋ค ๐