๐ JUnit
- ์๋ฐ์ ๋จ์ํ
์คํธ์ฉ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- ์คํ๋ง ํ๋ก์ ํธ ๋ฐฐํฌ์ ์์ฑ๋์ด์๋ ๋ชจ๋ ๋จ์ ํ
์คํธ๋ฅผ ํต๊ณผํด์ผ ๋ฐฐํฌ๋ฅผ ์งํํ ์ ์๋ค
- ๊ธฐ๋ณธ ๋ฒ์ ์ ๋๋ฌด ์๋ ๊ฒ์ด๋ฏ๋ก pom.xml์์ ๋ฒ๋์ ์์ ํ ํ ์ฌ์ฉ
๐ผ JUnit ๋ฒ์ ์
๋ฐ์ดํธ ํ๊ธฐ
- JUnit ๋ฒ์ ์
๋ฐ์ดํธ ํด๋ฆญ ํ Maven์ ์๋ ๊ฐ ๋ณต์ฌ
- pom.xml์ dependendy์์ junit์ฐพ๊ธฐ
- ํด๋น ๋ถ๋ถ์ ๋ณต์ฌํ ๋ด์ฉ ๋ถ์ฌ๋ฃ๊ธฐ
๐ผ JUnit์ ์ด๋
ธํ
์ด์
๋ค
- @Test : ํด๋น ๋ฉ์๋๊ฐ ๋จ์ ํ
์คํธ์์ ํ์ํ๋ ์ด๋
ธํ
์ด์
- @Ignore : ํด๋น ํ
์คํธ๋ฅผ ๋ฌด์ํ๋ค
- @Before : ํ
์คํธ ์์ ์ ์คํํ๋ ๋ฉ์๋, ํ
์คํธ ์ ์ ์ด๊ธฐํ๋ฑ์ ์์
์ ๋จผ์ ์ํํ๋ ์ญํ ์ ํ๋ค
- @After : ํ
์คํธ ์ข
๋ฃ ํ ์คํํ๋ ๋ฉ์๋, close()๋ฑ์ ์์
์ ์ํํ ๋ ์ฌ์ฉํ๋ค
๐ผ JUnit Asserts
- ๊ธฐ๋ํ๋ ๊ฒฐ๊ณผ๊ฐ ๋์ค๋ฉด ํ
์คํธ๋ฅผ ํต๊ณผํ๊ณ , ๊ธฐ๋ํ๋ ๊ฐ๊ณผ ๊ฒฐ๊ณผ๊ฐ ๋ค๋ฅด๋ฉด ํ
์คํธ์ ์คํจํ๋ค
- assertEquals(expect, test) : ๊ธฐ๋ํ๋ ๊ฐ๊ณผ ๊ฒฐ๊ณผ๊ฐ ์ผ์นํ๋ฉด ํ
์คํธ ํต๊ณผ
- assertTrue(test) : ๊ฒฐ๊ณผ๊ฐ true๋ฉด ํ
์คํธ ํต๊ณผ
- assertFalse(test) : ๊ฒฐ๊ณผ๊ฐ false๋ฉด ํ
์คํธ ํต๊ณผ
- assertNull(test) : ๊ฒฐ๊ณผ๊ฐ null์ด๋ฉด ํ
์คํธ ํต๊ณผ
- assertNotNull(test) : ๊ฒฐ๊ณผ๊ฐ null์ด ์๋๋ฉด ํ
์คํธ ํต๊ณผ
- assertThrows(expect, test) : ์คํ ๋์ค ์ํ๋ ์์ธ๊ฐ ๋ฐ์ํ๋ฉด ํ
์คํธ ํต๊ณผ
- fail() : fail()์ ๋ง๋๋ฉด ํ
์คํธ ์คํจ (ํ
์คํธ ๋ด๋ถ์์ return ๊ฐ์ ์ญํ ์ ํ๋ค)
์ฑ๊ธํค(Singleton) ํจํด
- ๊ฐ์ฒด ๋ด์์ ๋จ ํ๋์ ์ธ์คํด์ค๋ง ๊ฐ์ง๊ณ ์๋ ๊ฒ์ด ๋ณด์ฅ๋๋ ๋์์ธ ํจํด
- ์ฃผ๋ก ํ๋ก๊ทธ๋จ ๋ด์์ ํ๋๋ก ๊ณต์ ๋ฅผ ํด์ผํ๋ ๊ฐ์ฒด๊ฐ ์กด์ฌํ ๋ ํด๋น ๊ฐ์ฒด๋ฅผ ์ฑ๊ธํค์ผ๋ก ๊ตฌํํ์ฌ ๋ชจ๋ ์ ์ ๋๋ ํ๋ก๊ทธ๋จ๋ค์ด ํด๋น ๊ฐ์ฒด๋ฅผ ๊ณต์ ํ๋ฉฐ ์ฌ์ฉํ๋๋ก ํ ๋ ์ฌ์ฉํ๋ค
๐ ๋จ์ ํ
์คํธ (Unit test)
- ์ด๋ค ๊ธฐ๋ฅ์ ๊ตฌํํ ํ ํด๋น ๊ธฐ๋ฅ์ด ์ํ๋ ๋๋ก ๋์ํ๋์ง ๋ณด๊ธฐ ์ํด ์์ฑํ๋ ํ๋ก๊ทธ๋จ
- ํ
์คํธ ์ค ๊ฐ์ฅ ์์ ๋จ์์ ํ
์คํธ์ ์ํ๋ค
- ์ด๋ค ๋ฉ์๋๋ฅผ ์คํํ์ ๋ ๊ธฐ๋ํ๋ ๊ฐ์ด ์ ๋์ค๋์ง ์ฒดํฌํ๋ ๋ฐฉ์์ผ๋ก ์งํ
๐ TDD(Test Driven Development, ํ
์คํธ ์ฃผ๋ ๊ฐ๋ฐ)
- ์กฐ๊ฑด์ ๋ง์กฑํ๋ ํ
์คํธ ํ๋ก๊ทธ๋จ์ ๋จผ์ ์์ฑํ ํ ํด๋น ํ
์คํธ๋ฅผ ํต๊ณผํ๋ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ ๋ฐฉ์์ ๊ฐ๋ฐ(ํ
์คํธ ์ผ์ด์ค์ ํ
์คํธ ์ฝ๋๋ฅผ ๋จผ์ ์์ฑ)
- ํ
์คํธ ๋จ์๋ก ๊ธฐ๋ฅ์ด ๊ตฌํ๋๊ธฐ ๋๋ฌธ์ ๋์ฑ ๊ฐ์ฒด์งํฅ์ ์ธ ๊ฐ๋ฐ์ด ๊ฐ๋ฅํด์ง๋ค
- ์ ์ง๋ณด์(๋ฆฌํฉํ ๋ง)์ด ์ฉ์ดํด์ง๋ค
- ์ต์ํ์ง ์์ผ๋ฉด ์๊ฐ์ด ๋๋ฌด ์ค๋ ๊ฑธ๋ฆฌ๊ธฐ ๋๋ฌธ์ ์์ฐ์ฑ์ด ์ ํ๋๋ค (์์ฐ ๋น์ฉ ์ฆ๊ฐ)
๐ Jnuit ๋จ์ํ
์คํธ ๋ฐฉ๋ฒ
- src/main/java ํด๋์ ํจํค์ง์ ํด๋์ค๋ฅผ ๋ง๋ ๋ค
- ํด๋์ค ์์ ๋ง๋ค๊ณ ์ถ์ ๊ธฐ๋ฅ์ ์์ฑํ๋ค
- src/test/java ํด๋์ ๊ฐ์ ์ด๋ฆ์ ํจํค์ง๋ฅผ ๋ง๋ ํ ์ฐํด๋ฆญํ์ฌ JUnit Test Case ์์ฑ
- test ๋ฉ์๋ ์์ assertEquals(๊ธฐ๋ํ๋ ๊ฐ, ๋ด๊ฐ ์์ฑํ ํด๋์ค.๋ฉ์๋(๋งค๊ฐ๊ฐ) ์ ๋ฌ
- ์ฐํด๋ฆญ -> Run As -> JUnit Test ์คํ
๐ผ ๋จ์ ํ
์คํธ ์คํ
โ MyStringBuilder.java
package com.ezen.springmvc.common;
public class MyStringBuilder {
public static String reverse(String str) {
str = new StringBuilder(str).reverse().toString();
return str;
}
}
โ MyTest.java
package com.ezen.springmvc.common;
public class MyTest {
@Test
public void test1() {
assertEquals("elppa", MyStringBuilder.reverse("apple"));
}
}
๐บ ์คํ ๊ฒฐ๊ณผ >>
๐ ๋จ์ ํ
์คํธ์์ Autowired ์ฌ์ฉํ๊ธฐ
- Autowired๋ ์๋ฒ๊ฐ ์ผ์ง ๋ ์คํ๋๊ธฐ ๋๋ฌธ์ ์๋ฒ๋ฅผ ํตํ์ง ์๋ ๋จ์ํ
์คํธ์์๋ ์ฌ์ฉ์ด ๋ถ๊ฐํ๋ค
- ๋จ์ํ
์คํธ์์ Autowired๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ spring context์ spring testContext์ ๋ฒ์ ์ ์
๋ฐ์ดํธ ํด์ผํ๋ค
์ spring test context๋ฅผ release๋ฒ์ ์ผ๋ก ์
๋ฐ์ดํธ ํ๊ณ ๋ค์ ๋ด์ฉ์ ์ถ๊ฐ
@RunWith(SpringRunner.class) @ContextConfiguration("file:src/main/webapp/WEB-INF/spring/appServlet/servlet-context.xml")
- ํ
์คํธ ์ผ์ด์ค์ ํ
์คํธ ํ ํด๋์ค๋ฅผ ์ ์ธํ ๋ค @Autowired๋ฅผ ๋ถ์ด๋ฉด @Component ์ด๋
ธํ
์ด์
์ ๋ถ์ธ ์ ๋์ ์ฐพ์์ ์์์ ์คํํด์ค๋ค
๐ผ pom.xml์์ ์คํ๋ง ํ๋ ์์ํฌ ๋ฒ์ ์
๋ฐ์ดํธ ํ๊ธฐ
- spring context์์ Maven์ ๋ณต์ฌํ ํ <dependencies>์ <dependency>์ ๋ถ์ฌ๋ฃ๊ธฐ
- spring context์ ๊ฐ์ ๋ฒ์ ์ spring test context๋ฅผ ๋ณต์ฌํ์ฌ <dependencies>์ ์ถ๊ฐ
- <properties>์ <java-version>์ 1.8๋ก ๋ณ๊ฒฝ ํ <configuration>์ <source>์ <target>์ ์์์ ์ค์ ํ ๋ณ์๋ช
(${java-version}์ผ๋ก ๋ณ๊ฒฝ)
- ํด๋น ํ๋ก์ ํธ ์ฐํด๋ฆญ -> Maven -> Update Project ... ์คํ
MyReducer.java (์ธํฐํ์ด์ค)
@RunWith(SpringRunner.class)
@ContextConfiguration("file:src/main/webapp/WEB-INF/spring/appServlet/servlet-context.xml")
MyReducer_Impl.java (๊ตฌํ์ฒด)
@Component
public class MyReducer_Impl implements MyReducer {
@Override
public Integer reduce(Integer[] arr) {
int sum = 0;
for(Integer i : arr) {
sum += i == null ? 0 : 1;
}
return sum;
}
}
MyReducerTest.java (ํ
์คํธ์ผ์ด์ค)
@RunWith(SpringRunner.class)
@ContextConfiguration("file:src/main/webapp/WEB-INF/spring/appServlet/servlet-context.xml")
public class MyReducerTest {
@Autowired
MyReducer reducer;
@Before
public void test0() {
System.out.println(reducer);
}
@Test
public void test1() {
assertEquals(Integer.valueOf(150), reducer.reduce(new Integer[] {10,20,30,40,50}));
}
@Test
public void test2() {
assertEquals(Integer.valueOf(120), reducer.reduce(new Integer[] {10,20,null,40,50}));
}
@Test
public void test3() {
assertEquals(Integer.valueOf(0), reducer.reduce(new Integer[] {null, null, null}));
}
}