학습
Scala 기본적인 테스트 (JUnit)
Scala 기본적인 테스트 (JUnit) — 초급
기본적인 테스트 (JUnit)
1. 도입 (왜 배워야 하는가)
소프트웨어 개발에서 테스트는 매우 중요한 과정입니다. 테스트는 코드의 품질을 보장하고, 버그를 조기에 발견할 수 있도록 도와줍니다. 특히, 팀 프로젝트에서는 다른 개발자가 작성한 코드를 수정하거나 추가할 때 기존 코드가 정상적으로 작동하는지 확인하는 것이 필수적입니다. 만약 테스트를 하지 않는다면, 새로운 기능 추가 시 기존 기능에 문제가 생길 수 있으며, 이는 결국 제품의 품질 저하로 이어질 수 있습니다.
2. 핵심 개념 설명
- JUnit: Java 프로그래밍 언어를 위한 테스트 프레임워크로, Scala에서도 사용할 수 있습니다. JUnit을 사용하면 테스트를 작성하고, 실행하며, 결과를 확인하기가 수월해집니다.
- 테스트 케이스: 특정 기능이나 메소드가 제대로 작동하는지 검증하기 위한 코드 블록입니다. 마치 음식의 레시피처럼, 어떤 입력을 주었을 때 기대하는 결과가 있는지를 정의합니다.
| 용어 | 설명 |
|---|---|
| 테스트 | 코드의 특정 부분이 예상대로 동작하는지 검증하는 과정 |
| 테스트 메소드 | JUnit에서 테스트를 실행하기 위해 정의하는 메소드 |
| 어서션 | 특정 조건이 참인지 검사하는 메소드 |
3. 기본 코드 예제
다음은 JUnit을 사용하여 간단한 덧셈 기능을 테스트하는 코드입니다.
import org.junit.Test
import org.junit.Assert._
class CalculatorTest {
@Test
def testAddition(): Unit = {
val sum = add(2, 3)
assertEquals(5, sum)
}
def add(a: Int, b: Int): Int = {
a + b
}
}
- import org.junit.Test: JUnit의 Test 어노테이션을 가져옵니다.
- import org.junit.Assert._: 어서션 메소드를 가져옵니다.
- class CalculatorTest: 테스트를 위한 클래스를 정의합니다.
- @Test: 이 메소드가 테스트 메소드임을 표시합니다.
- def testAddition(): Unit: 덧셈 기능을 테스트하는 메소드를 정의합니다.
- val sum = add(2, 3): add 메소드를 호출하여 2와 3의 합을 계산합니다.
- assertEquals(5, sum): 기대하는 결과(5)와 실제 결과(sum)를 비교합니다.
4. 실전 활용 예제
- 쇼핑몰 장바구니 구현:
- 사용자 로그인 기능:
- 실수 1: 어서션을 잘못 사용하기
- 실수 2: 테스트 메소드를 @Test 어노테이션 없이 정의하기
- JUnit은 테스트를 통해 코드의 품질을 보장하는 데 필수적인 도구입니다.
- 테스트 케이스는 특정 기능이 제대로 작동하는지 검증하기 위한 코드 블록입니다.
- 테스트 메소드는 @Test 어노테이션을 사용하여 정의하며, 어서션을 통해 결과를 검증합니다.
- Mockito를 사용한 Mocking 테스트
- 통합 테스트와 단위 테스트의 차이
- Scalacheck를 사용한 프로퍼티 기반 테스트
장바구니에 상품을 추가하는 기능을 테스트할 수 있습니다. 예를 들어, 특정 상품을 장바구니에 추가했을 때 장바구니의 총 가격이 올바르게 계산되는지를 검증할 수 있습니다.
@Test
def testAddItemToCart(): Unit = {
val cart = new ShoppingCart()
cart.addItem("Apple", 2.0)
assertEquals(2.0, cart.totalPrice(), 0.001)
}
사용자가 로그인할 때, 올바른 사용자 이름과 비밀번호 입력 시 로그인 성공 여부를 테스트할 수 있습니다.
@Test
def testUserLogin(): Unit = {
val userService = new UserService()
assertTrue(userService.login("username", "password"))
}
5. 흔한 실수와 주의사항
- 잘못된 코드:
assertEquals(6, sum) // 기대값과 실제값이 다름
- 올바른 코드:
assertEquals(5, sum) // 기대값과 실제값이 같음
- 잘못된 코드:
def testAddition(): Unit = { ... }
- 올바른 코드:
@Test
def testAddition(): Unit = { ... }
6. 정리
다음에 학습하면 좋은 주제: