๋ค์๊ณผ ๊ฐ์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค(_junit 4.11_ ์ฌ์ฉ).
<strong i="6">@ClassRule</strong>
public static TemporaryFolder tmp = new TemporaryFolder();
...
<strong i="7">@Parameters</strong>
public static Collection<Object[]> data() throws Exception {
return java.util.Arrays.asList(new Object[][] {
{0, tmp.getRoot().getPath()}
});
}
์ด๋ก ์ธํด initializationError ๊ฐ ๋ฐ์ํฉ๋๋ค.
java.lang.IllegalStateException: the temporary folder has not yet been created
at org.junit.rules.TemporaryFolder.getRoot(TemporaryFolder.java:127)
๋ฐ๋ผ์ __@Parameters_ ๋ฉ์๋๋ _ClassRule_ ์ด๊ธฐํ ๋จ๊ณ ์ ์ ์คํ๋์ด ์์ ๊ฐ์ ์๋๋ฆฌ์ค๋ฅผ ์ฝ๊ฐ ๋ณต์กํ๊ฒ ๋ง๋ญ๋๋ค.
ํ์ฌ ํด๊ฒฐ ๋ฐฉ๋ฒ:
protected static TemporaryFolder initStaticTemp() {
try {
return new TemporaryFolder() { { before(); } };
} catch (Throwable t) {
throw new RuntimeException(t);
}
}
public static TemporaryFolder tmp = initStaticTemp();
<strong i="6">@AfterClass</strong>
public static cleanup() throws Exception {
tmp.delete();
}
์๋ํ์ง๋ง ์๋ ์ ๋ฆฌ๊ฐ ํ์ํฉ๋๋ค ...
+1
๊ทธ๊ฒ์ ๋ํด ์กฐ๊ธ ์๊ฐํด๋ณด๋ฉด ์ด๊ฒ์ ๊ตฌํํ๋ ์ข์ ๋ฐฉ๋ฒ์ ์ด์ ๋ํ ์ฃผ์์ ๋์ ํ๋ ๊ฒ์ ๋๋ค.
<strong i="7">@Parameters</strong>
<strong i="8">@AfterClassRules</strong>
public Object[][] generateParameters() {
// do stuff
}
์ด๋ ๊ฒ ํ๋ฉด ๋ ๋ณํ์ ๊ณ์ ์ฌ์ฉํ ์ ์๊ณ ๊ธฐ์กด ์ฝ๋๊ฐ ์์๋์ง ์์ต๋๋ค. ์ด ๋์์ธ์ด ๋ฉ์ธํ ์ด๋์๊ฒ ๋ฐ์๋ค์ฌ์ง๋ค๋ฉด ๋๋ ์ด์ ๋ํ ํ ๋ฆฌํ์คํธ ์์ ์ ์์ํ ๊ฒ์ ๋๋ค.
๋๊ธ์ ๋ํ ์ ๋ฐ์ดํธ๊ฐ ์๋ฆผ์ ํธ๋ฆฌ๊ฑฐํ๋์ง ํ์คํ์ง ์๊ธฐ ๋๋ฌธ์ ์ถ๊ฐ ๋๊ธ์ ์๋๋ค.
์ด์ ์๊ฒฌ์์ ์ ์ํ ๋์์ธ์ด ์ ์ง ๊ด๋ฆฌ์์๊ฒ ํ์ฉ๋ฉ๋๊น? ๊ทธ๋ ๋ค๋ฉด ํ ๋ฆฌํ์คํธ ์์ ์ ์์ํ๊ฒ ์ต๋๋ค.
์ฌ๊ธฐ์๋ ์๋นํ ์ด๋ ค์ด ์ํคํ ์ฒ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. JUnit์ Eclipse์ ๊ฐ์ ์คํ์๋ค์๊ฒ ํ ์คํธ๊ฐ ์คํ๋๊ธฐ ์ ์ ์ผ๋ง๋ ๋ง์ ํ ์คํธ๊ฐ ์๋์ง ์ด๊ฑฐํ ์ ์๋ค๊ณ ์ฝ์ํ์ง๋ง ์ด ๊ณํ ๋จ๊ณ์์ ์๋น๋๋ ๋ฆฌ์์ค๋ ์ต์ํํ๋ ค๊ณ ํฉ๋๋ค. ๊ทธ๋์ ์ฐ๋ฆฌ๋ ์๋ฅผ ๋ค์ด ์์ ํด๋๋ฅผ ์์ฑํ๊ฑฐ๋ ์๋ฒ ์์๊ณผ ๊ฐ์ด ClassRules์ ํ์๋๋ ํจ์ฌ ๋ ๊ณผ๊ฐํ ์์ ์ ์ํํ๊ธฐ ์ ์ ์ผ๋ง๋ ๋ง์ ๋งค๊ฐ๋ณ์๊ฐ ์๋์ง ์๊ณ ์ถ์ต๋๋ค.
์๋ง๋ ๋ด๊ฐ ๊ฐ์ฅ ์ข์ํ๋ ๋๋ต์ ์ด๋ก ์์ @DataPoints ์ ๊ฐ์ ๊ฒ์ ํ์ฑํํ๋ ๊ฒ์ ๋๋ค. @ParameterSet ์ ๋์ฌ๊ฐ ๋ถ์ ์ ์ ํ๋ ๋๋ ์ ์ ๋ฉ์๋๊ฐ ์์ ์ ์์ผ๋ฉฐ, ์ด ๋ฉ์๋๋ ํจ๊ป ๊ฒฐํฉ๋์ด ์ ์ฒด ๋งค๊ฐ๋ณ์ ์งํฉ์ ๋ง๋ญ๋๋ค. ๋ฐ๋ผ์ ๊ทํ์ ์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
@ClassRule ๊ณต๊ฐ ์ ์ TemporaryFolder tmp = new TemporaryFolder();
@ParameterSet ๊ณต๊ฐ ์ ์ ๊ฐ์ฒด[] ๋จผ์ = ์ ๊ฐ์ฒด[] { 0 };
@ParameterSet ๊ณต๊ฐ ์ ์ ๊ฐ์ฒด[] ์ด() {
return new Object[] { tmp.getRoot().getPath(); }
}
์ฌ๊ธฐ์ ์์ ์ ์ค์ ๋ก ์คํํ์ง ์๊ณ ๋ "๋ ๋ฒ์งธ" ๋ฉ์๋๋ฅผ ๊ณ์ฐํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค.
์ด๋ป๊ฒ ์๊ฐํด?
ํ , ์ง๊ธ ์๊ฐํด๋ณด๋ฉด ๋ฌธ์ ๋ ์ค์ ๋ก ๋ด ํ ์คํธ ์ฝ๋์์ ๋ ๋ง์ ๋์๊ฐ ๋๋ ๊ฒ ๊ฐ์ต๋๋ค. ์๊ฒฉ ์๋น์ค์ ์ฐ๊ฒฐํ๊ณ ๊ตฌ์ฑ ๋ฐฉ๋ฒ์ ๋ฐ๋ผ ํ ์คํธ๋ฅผ ์คํ ์ค์ ๋๋ค. ๋์ ํ ์คํธ์์ ์์ ๊ตฌ์ฑ์ ์์ ํด์ผ ํฉ๋๋ค.
๋ค์์ ๋ด๊ฐ ์๋ ๋ฌธ์ ์ ์ง๋ฉดํ ํ ์คํธ์ ๋๋ค. CryptoAppExecReturnCodeTest.java
@dsaff ์ ์์ ๋ํด ์๊ฐํด ๋ณด๊ฒ ์ต๋๋ค. ์ด๊ธฐ ์ธ์์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ์์ ๋ณ๋์ ๋ฐฐ์ด๋ก ๋ถํ ํ๋ ค๋ฉด ์์์ ์์น์ ํน๋ณํ ์ฃผ์๊ฐ ํ์ํฉ๋๋ค(์กฐ๊ธ ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ธฐ ์ฝ์ต๋๋ค). ๊ทธ๋์ ๋๋ _first_ ๋ฅผ ์ผ๋ถ ๋๋ฏธ๋ก ์ฑ์ฐ๊ฒ ๋ ์๋ ์์ต๋๋ค(๋จ์ง ์์์ ์๋ฅผ ์ ์งํ๋ ๊ฒ). ๊ทธ๋ฆฌ๊ณ _second_์์ - ์ ์์๋ฅผ ์๋ก ์์ ์ ์งํ๊ณ ์ถ์ต๋๋ค.
{ 0, tmp...getPath() },
{ 1, ... }
ํ ์คํธ ํ์ ์ธ์ ๋ฌ๋์๊ฒ ํ์ํ ๊ฒ์ด ์์ต๋๊น? (์ - ์๋ง๋ ํ ์คํธ ์ด๋ฆ?)
@javornikolov , ๋ฐฉ๊ธ ๊ทํ์ ์ด๊ธฐ ๊ฒ์๋ฌผ์ ์๋ชป ์ฝ์๋ค๋ ๊ฒ์ ๊นจ๋ฌ์์ต๋๋ค. ๊ทธ๋์ ๋ด ์๋ต์ด ํผ๋์ค๋ฌ์ธ ์ ์์ต๋๋ค. ๋๋ ๋น์ ์ ํ ์คํธ๋ฅผ ํ๋์ ๋งค๊ฐ๋ณ์๋ก ๊ตฌ์ฑ๋ ํ ์คํธ ํด๋์ค์ ๋ ๊ฐ์ง ๋ค๋ฅธ ์ธ์คํด์ค๋ก ์ฝ๊ณ ์์์ต๋๋ค. ์ด์ ๋ค์ ์ฝ์์ง๋ง ์ค์ ๋ก๋ ๋ ๊ฐ์ ๋งค๊ฐ๋ณ์๋ก ๊ตฌ์ฑ๋ ํ ์คํธ ํด๋์ค์ ํ๋์ ์ธ์คํด์คํ์ ๋๋ค. ๋ด ์ ์์ ์กฐ์ ํ๊ธฐ ์ํด ์ ์๋ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
<strong i="7">@ClassRule</strong> public static TemporaryFolder tmp = new TemporaryFolder();
<strong i="8">@ParameterSet</strong> public static Object[] only() {
return new Object[] { 0, tmp.getRoot().getPath(); }
}
๋ด ์๋๊ฐ ๋ ๋ช ํํด์ง๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. ์ฒ์์ ํผ๋์ ๋๋ ค ์ฃ์กํฉ๋๋ค.
(์ค๋๋ ๋ฒ๊ทธ๋ฅผ ํตํด ์งํ)
์๋ง๋ ์ด ๋ฌธ์ ์ ์ด๋ฆ์ "์ด๋ก ์์ @DataPoints ์ ๊ฐ์ ๊ฒ์ ํ์ฑํ"๋ก ๋ฐ๊ฟ์ผ ํ ๊น์?
(์ค๋๋ ๋ฒ๊ทธ๋ฅผ ํตํด ์งํ)
์๋ง๋ ์ด ๋ฌธ์ ์ ์ด๋ฆ์ "์ด๋ก ์์ @DataPoints ์ ๊ฐ์ ๊ฒ์ ํ์ฑํ"๋ก ๋ฐ๊ฟ์ผ ํ ๊น์?
๋ฌธ์ ๋ ๋งค๊ฐ๋ณ์ํ๋ ํ
์คํธ์ ๋ํ ๋งค๊ฐ๋ณ์ ๋ชฉ๋ก์์ Rule
๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํ ์ ์๋ ๊ธฐ๋ฅ์ ๊ฐ๋ ๊ฒ์
๋๋ค. @dsaff ๊ฐ ์ ์ํ @ParameterSet
์ ๊ทผ ๋ฐฉ์์ ๋์๊ฒ ์คํ ๊ฐ๋ฅํ ๊ฒ ๊ฐ์ต๋๋ค(ํ๊ฐ๊ฐ ์๋ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋๋ ์์๋ก ๋ฐ์ํ๋ค๊ณ ๊ฐ์ ).
๊ทธ๋ฌ๋ "@DataPoints์ ๊ฐ์ ๊ฒ"์ด ์ถฉ๋ถํ ๋ช
ํํ๊ณ ์๋ ์๋๋ฆฌ์ค๋ฅผ ๋ค๋ฃจ์ง ์๋ ์ด๋ค ๋ฐฉํฅ์ผ๋ก ๋ฐ์ฐํ ์ํ์ด ์๋ค๋ฉด: ๊ด์ฐฎ์ต๋๋ค.
๋ด๊ฐ DataPoints๋ฅผ ์ฌ์ฉํ๋ ์ด๋ก ๋ณด๋ค ๋งค๊ฐ๋ณ์ํ๋ ํ
์คํธ๋ฅผ ์ ํธํ๋ ์ด์ ๋ ํ์์ ๊ฒฐ๊ณผ๊ฐ ๊ฐ ๋งค๊ฐ๋ณ์ ์งํฉ์ ๋ํด ๋
๋ฆฝ์ ์ผ๋ก ๋ณด๊ณ ๋์ง ์๊ณ ์ฒซ ๋ฒ์งธ ์คํจ๊ฐ ํ์ ๋งค๊ฐ๋ณ์์ ์คํ์ ์ค๋จํ๊ธฐ ๋๋ฌธ์
๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
ํ์ฌ ํด๊ฒฐ ๋ฐฉ๋ฒ:
์๋ํ์ง๋ง ์๋ ์ ๋ฆฌ๊ฐ ํ์ํฉ๋๋ค ...