KOTLIN · 테스트
BDD 스타일 테스트 (Given-When-Then)
Given-When-Then 형식으로 테스트를 구조화하여 비즈니스 요구사항을 명확히 표현합니다.
테스트중급bddgiven-when-thenbehaviorscenario
핵심 설명
Given-When-Then 형식으로 테스트를 구조화하여 비즈니스 요구사항을 명확히 표현합니다.
Kotlin code
// BDD 스타일 DSL
class BddTest(val name: String) {
private var givenBlock: (() -> Unit)? = null
private var whenBlock: (() -> Unit)? = null
private var thenBlock: (() -> Unit)? = null
fun given(desc: String, block: () -> Unit) { println(" Given: $desc"); givenBlock = block }
fun whenever(desc: String, block: () -> Unit) { println(" When: $desc"); whenBlock = block }
fun then(desc: String, block: () -> Unit) { println(" Then: $desc"); thenBlock = block }
fun run() {
println("시나리오: $name")
givenBlock?.invoke()
whenBlock?.invoke()
thenBlock?.invoke()
println(" ✓ 통과
")
}
}
fun scenario(name: String, block: BddTest.() -> Unit) {
BddTest(name).apply(block).run()
}
class ShoppingCart {
private val items = mutableListOf<Pair<String, Int>>()
fun add(name: String, price: Int) { items.add(name to price) }
fun total() = items.sumOf { it.second }
fun itemCount() = items.size
fun clear() = items.clear()
}
fun main() {
scenario("장바구니에 상품 추가") {
val cart = ShoppingCart()
given("빈 장바구니가 있다") { cart.clear() }
whenever("상품 2개를 추가한다") {
cart.add("노트북", 1500000)
cart.add("마우스", 30000)
}
then("총액은 1,530,000원이다") {
assert(cart.total() == 1530000) { "총액 불일치: ${cart.total()}" }
assert(cart.itemCount() == 2) { "개수 불일치" }
}
}
scenario("빈 장바구니 총액") {
val cart = ShoppingCart()
given("빈 장바구니가 있다") { cart.clear() }
whenever("아무것도 추가하지 않는다") {}
then("총액은 0원이다") {
assert(cart.total() == 0) { "빈 장바구니 총액이 0이 아님" }
}
}
}학습 팁
Kotest의 BehaviorSpec이나 Spek을 사용하면 더 강력한 BDD 테스트 프레임워크를 활용할 수 있습니다.
주의할 점
Given-When-Then의 경계를 모호하게 작성하면 테스트 의도가 불명확해집니다. Given은 전제조건, When은 동작, Then은 검증으로 명확히 구분하세요.
자주 묻는 질문
BDD 스타일 테스트 (Given-When-Then)란 무엇인가요?
Given-When-Then 형식으로 테스트를 구조화하여 비즈니스 요구사항을 명확히 표현합니다.
BDD 스타일 테스트 (Given-When-Then) 학습 시 주의할 점은 무엇인가요?
Given-When-Then의 경계를 모호하게 작성하면 테스트 의도가 불명확해집니다. Given은 전제조건, When은 동작, Then은 검증으로 명확히 구분하세요.
Continue Learning
Kotlin 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.