Given When Then Pattern ( 테스트 케이스 작성 기법 )
주로 테스트 케이스를 작성하거나 스펙을 정의할때 사용하는 패턴으로
이 패턴은 테스트 케이스의 구조를 명확하게 만들고 테스트의 목적을 명시적으로 표현하는데 도움이 된다.
주로 BDD(Behavior-Driven Developement), TDD(Test Driven Development)에서 사용한다.
반응형
<Given : 주어진 상황>
테스트를 시작하기 전에 시스템이 특정 상태어야 하는 전제 조건이다.
이미 주어진 환경, 혹은 필요한 환경도 포함된다.
< When : 언제>
어떤 조건이나 특정한 상황을 설정하는 부분으로 특정한 행동이나 이벤트를 트리거하너 전제 조건을 설정한다.
< Then : 그럼에도 불구하고 >
When에서 설정한 조건에 대한 기대 결과 혹은 예상 동작에 대한 결과를 명시한다.
< 예시 상황 >
ATM에서 현금 인출
Given | 2000달러의 잔고를 가진 유효한 은행 계좌가 있다. |
When | ATM 카드를 삽입하고 1000달러를 인출하고자 할때 |
Then | 인출 이후의 잔액은 1000달러야 하고 ATM에서 1000달러는 현금으로 지급해야 한다. |
< C# 코드로 구현 >
using NUnit.Framework; // 또는 다른 테스트 프레임워크 사용시 해당 프레임워크 import
public class BankAccountTests
{
private BankAccount account;
[SetUp]
public void Setup()
{
// 초기화: 테스트 전에 실행되는 부분
account = new BankAccount(2000); // 초기 잔액 2000달러를 가진 은행 계좌 생성
}
[Test]
public void Withdrawal_From_ATM_Should_Update_Balance_And_Disburse_Cash()
{
// Given
// 주어진 상황: 초기 잔액이 2000달러인 은행 계좌가 있다. (Setup 메서드에서 이미 초기화)
// When
// 언제: ATM에서 1000달러를 인출하려고 시도한다.
account.Withdraw(1000);
// Then
// 그럼에도 불구하고: 계좌 잔액은 1000달러여야 하며, 인출한 1000달러가 현금으로 지급되어야 한다.
Assert.AreEqual(1000, account.Balance);
// 그 외에 다른 어설션들도 추가 가능
}
}
public class BankAccount
{
public decimal Balance { get; private set; }
public BankAccount(decimal initialBalance)
{
Balance = initialBalance;
}
public void Withdraw(decimal amount)
{
// 인출 메서드 구현
// 실제 은행 계좌에서는 여러 처리 단계가 필요할 것임
Balance -= amount;
// 현금 지급 등의 추가 로직
}
}
★☆☆☆☆
반응형
'개발 > 기본) 알고리즘' 카테고리의 다른 글
알고리즘) Force-Directed Drawing Algorithms (시각화 알고리즘) (0) | 2024.04.30 |
---|---|
알고리즘)Decision Trees Algorithm(의사 결정 알고리즘) (0) | 2024.03.08 |
알고리즘) WayPoint Algorithm(길찾기 알고리즘) (0) | 2023.11.21 |
알고리즘) SOLID 원칙 (솔리드 패턴) (2) | 2023.10.19 |
알고리즘) 매치 메이킹 (Matching Algorithms) (0) | 2023.09.04 |
댓글