본문 바로가기
개발/기본) 알고리즘

알고리즘) Given When Then Pattern ( 테스트 케이스 작성 기법 )

by 테샤르 2024. 1. 31.

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;
        // 현금 지급 등의 추가 로직
    }
}

 

 

★☆☆☆☆

 

반응형

댓글