JUnit
TDD๋ฅผ ๊ณต๋ถํ๋ ์ค์ Java์ ๋ํ์ ์ธ Testing Framework์ธ JUnit์ ๋ํด ์์ ์ ๊ณต๋ถ๋ฅผ ํ์์ง๋ง ์ ๊ธฐ์ต์ด ๋์ง ์์๋ค. JUnit์ ์ด๋ ํ Method๊ฐ ์๋์ง ๊ทธ ์ญํ ์ ๋ญ์ง์ ๋ํด ์ ๋ฆฌํ๊ธฐ ์ํด ํฌ์คํธ๋ฅผ ์์ฑํฉ๋๋ค.
xUnit์ด๋?
- ์๋ฐ๋ง ๋จ์ ํ ์คํ ํ๋ ์ ์ํฌ์ธ JUnit๋ง ์๋๊ฒ ์๋๋ค. ๋ค๋ฅธ ์ธ์ด๋ ๋จ์ ํ ์คํธ๋ฅผ ์ํ ํ๋ ์์ํฌ๊ฐ ์กด์ฌํ๋ฉฐ ๋ณดํต ์ด๋ฆ์ xUnit์ด๋ผ ์นญํ๋ค.
xUnit์ด๋ฆ | ํด๋น ์ธ์ด | ๊ด๋ จ ์ฌ์ดํธ --------------- | ---------------- CUnit | C | http://cunit.sourceforge.net/ CppUnit | C++ | https://sourceforge.net/projects/cppunit/ PHPUnit | PHp | https://phpunit.de/ PyUnit | Python | http://pyunit.sourceforge.net/ JUnit | Java | http://junit.org/
1. JUnit ํ๊ฒฝ๊ตฌ์ถํ๊ธฐ
- Maven์ ํตํด ์ฝ๊ฒ ์ถ๊ฐ ํ ์ ์๋ค.
- pom.xml์ dependency๋ฅผ ์ถ๊ฐํ๋ค.
- JUnit Source : https://mvnrepository.com/artifact/junit/junit
- Compile Dependencies๊ฐ ์๋ JUnit์ hamcrest๋ฅผ ๊ฐ์ด ์ถ๊ฐํด ์ฃผ์ด์ผ ํ๋ค.
- pom.xml์ ๋ชจ์ต
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.8.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-all</artifactId>
<version>1.1</version>
<scope>test</scope>
</dependency>
</dependencies>
2. JUnit Assert๊ด๋ จ Method
Method | ๋ด์ฉ |
---|---|
assertArrayEquals(a,b) | ๋ฐฐ์ด a์b๊ฐ ์ผ์นํจ์ ํ์ธํ๋ค. |
assertEquals(a,b) | ๊ฐ์ฒด a์b์ ๊ฐ์ด ๊ฐ์์ง ํ์ธํ๋ค. |
assertSame(a,b) | ๊ฐ์ฒด a์b๊ฐ ๊ฐ์ ๊ฐ์ฒด์์ ํ์ธํ๋ค. |
assertTrue(a) | a๊ฐ ์ฐธ์ธ์ง ํ์ธํ๋ค. |
assertFalse(a) | a๊ฐ ๊ฑฐ์ง์ธ๊ธฐ ํ์ธํ๋ค. |
assertNotNull(a) | a๊ฐ์ฒด๊ฐ Null์ด ์๋์ ํ์ธํ๋ค. |
- ๋ ๋ง์ assert๊ด๋ จ ๋ด์ฉ : http://junit.sourceforge.net/javadoc/org/junit/Assert.html
3. JUnit Function Flow
- setUp() : ํ
์คํธ ๋์ ํด๋์ค์ ์คํ์ ์ ๊ฐ์ฅ ๋จผ์ setUP()์ ์คํํ๋ค.
- ex) ๋คํธ์ํฌ ์ฐ๊ฒฐ, DB ์ฐ๊ฒฐ์ ํ์ฉํ๋ค.
- tearDown() : ๊ฐ์ฅ ๋ง์ง๋ง์ ์ํ๋๋ฉฐ setUp()์ ๋ฐ๋ ๊ฐ๋
์ผ๋ก ์๊ฐํ๋ฉด ๋๋ค.
- ex) ๋คํธ์ํฌ ์ฐ๊ฒฐ ์ข ๋ฃ, DB ์ฐ๊ฒฐ์ ์ข ๋ฃํ๋๋ฐ ํ์ฉํ๋ค.
- setUp()๊ณผ tearDown()์ Test Case๋ฅผ ์งํํ ๋๋ง๋ค ๋ฐ๋ณต์ ์ผ๋ก ์คํ๋๋ค.
- ex) setUp() โ TestA() โ tearDown() โ setUp() โ TestB() โ tearDown()
4. JUnit Annotation
- @Test : ํด๋น Method๋ Test๋์ ๋ฉ์๋์์ ์๋ฏธํ๋ค.
public class Example {
@Test
public void method() {
org.junit.Assert.assertTrue( new ArrayList().isEmpty() );
}
}
- @BeforeClass : ํด๋น ํ ์คํธ๊ฐ ์์ ์ ์ ๋ฑ ํ ๋ฒ์ฉ๋ง ์ํ๋๋๋ก ์ง์ ํ๋ค.
public class Example {
@BeforeClass public static void onlyOnce() {
...
}
@Test public void one() {
...
}
@Test public void two() {
...
}
}
- @AfterClass : ํด๋น ํ ์คํธ๊ฐ ๋๋๊ณ ๋ฑ ํ ๋ฒ์ฉ๋ง ์ํ๋๋๋ก ์ง์ ํ๋ค.
public class Example {
DatabaseConnection database;
@BeforeClass public static void login() {
database= ...;
}
@Test public void something() {
...
}
@Test public void somethingElse() {
...
}
@AfterClass public static void logout() {
database.logout();
}
}
- @Before : ํด๋น ํ ์คํธ๊ฐ ์งํ์ด ์์๋๊ธฐ ์ ์ ์์ ํ ๋ด์ฉ์ ํธ์ถํ๋ค.
public class Example {
List empty;
@Before public void initialize() {
empty= new ArrayList();
}
@Test public void size() {
...
}
@Test public void remove() {
...
}
}
- @After : ํด๋น ํ ์คํธ๊ฐ ์งํ์ด ๋๋ ํ์ ์์ ํ ๋ด์ฉ์ ํธ์ถํ๋ค.
public class Example {
File output;
@Before public void createOutputFile() {
output= new File(...);
}
@Test public void something() {
...
}
@After public void deleteOutputFile() {
output.delete();
}
}
- @Ignore : TestCase๋ฅผ ๋ฌด์ํ ์ ์๋ค.
@Ignore
public class IgnoreMe {
@Test public void test1() { ... }
@Test public void test2() { ... }
}
- Flow