TIL / Describe-Context-It

zzezze·2022년 11월 26일
0

TIL

목록 보기
88/137

이번주 테스트를 작성하면서 Describe-Context-It 패턴을 이용했다.

이전까지 테스트코드를 작성할 때 어떤 맥락에서 이 테스트가 동작하는지에 대한 설명을 한번에 알아보기 어려웠던 적이 있었다.

Describe - Context - It을 이용해서 코드의 행동을 설명하는 패턴을 만들 수 있어 더 이해하기 쉬운 테스트코드를 만들었다.

Describe에는 설명할 테스트 대상을 명시한다.

describe('login', () => {

Context는 테스트 대상이 놓인 상황을 설명한다.
with 또는 when으로 시작하도록 한다.

context('with correct accountNumber and password ', () => {

It은 테스트 대상의 행동을 설명한다.
행동을 심플하게 설명한다.

it('load accountNumber information', async () => {

이 패턴을 사용해 테스트코드를 계층 구조로 만들어 어떤 흐름에서 테스트코드가 실행되는지 알기 쉽게 설명할 수 있다.

JUnit5에서도 @Nested와 @DisplayName을 이용하여 이런 모양으로 테스트를 작성할 수 있다.

    @Nested
    @DisplayName("TransferTo")
    class Describe_transferTo {
        @Nested
        @DisplayName("With correct amount")
        class Context_with_CorrectAmount {
            @Test
            @DisplayName("Transfer success and amount change")
            void transferTo() {
                Long transferAmount = 100_000L;

                account1.transferTo(account2, transferAmount);

                assertThat(account1.amount()).isEqualTo(amount1 - transferAmount);
                assertThat(account2.amount()).isEqualTo(amount2 + transferAmount);
            }
        }
    }

물론 짧고 간단한 테스트의 경우 한눈에 봐도 알기 쉬운 경우가 있지만 테스트가 많아지는 경우엔 이렇게 분기를 나눠 테스트하는 것이 나중에 테스트를 다시 봤을 때 훨씬 이해하기 쉽게 만들어 줄 것이라고 생각한다.

0개의 댓글