✌️
Studylog
See More
Studylog
Studylog
  • INTRO
  • AWS
    • AWS101
      • Virtualization and the AWS structures
      • AWS account and free-tier
      • AWS IAM
      • AWS EC2
        • EC2 basic
        • ENI and EIP
        • Elastic Block Storage
        • Auto Scaling
        • Elastic Load Balancer
  • IaC
    • Terraform
      • License Change
      • Tutorial
      • Module
      • Versioning
  • Airflow
    • Airflow-Ninja
      • Introduction and Goal
      • Tutorial: Settings
      • Tutorial: Module Import, Alert
  • Docker
    • Production with Docker
      • Customizing root directory
  • Network
    • Network-Handbook
      • Introduction and Goal
      • OSI7Layer
      • DNS
      • SSL/TLS
  • Comupter Architecture
    • Basic
      • Introduction and Goal
      • Chapter 1. The Internal Language of Computers
      • Chapter 2. Combinatorial Logic
      • Chapter 3. The Essentials of Memory and Disk Sequential Logic
    • Hands-on
      • Introduction and Goal
      • theory
        • Chapter 1. Logic Gates
        • Chapter 2. ALU
      • project
        • Project 1. Elementary logic gates implement
        • Project 2. Boolean Arithmetic
  • Java
    • Readable Code
      • 학습 목적
      • 추상화
      • 논리적 사고 흐름
      • 객체지향 이론
      • 객체지향 코드 적용하기
      • 코드 다듬기
      • 읽기 좋은 코드를 도와줄 조언들
  • Spring Boot
    • Practical Testing
      • 테스트 사전 지식
      • 스프링 레이어드 아키텍처 테스트하기
        • Persistence Layer
        • Business Layer
    • 스프링 핵심 원리 - 기본편
      • 객체 지향 설계와 스프링
      • 스프링 핵심 원리 이해
        • 예제 만들기
        • 객체 지향 원리 적용
        • 스프링 컨테이너와 스프링 빈
  • Python
    • Effective Python
      • Introduction and Goal
      • Closure: Lazy Evaluation And Eager Evaluation
      • Python public attributes are better getter-setter
      • No refactoring attribute, we can use property decorator
      • You can do it, but it means you don't have to
  • Playgrounds
    • Java Playground
      • 학습 목적
      • 숫자 야구 게임
        • 학습 테스트
        • 문자열 계산기
        • 숫자 야구 게임 구현
        • 숫자 야구 게임 다시 구현하기
      • 자동차 경주
        • 문자열 덧셈 계산기
        • 자동차 경주 미션 구현
      • 좌표 계산기
        • 연료 주입
        • 좌표 계산기 미션 구현
    • Infra Playground
      • VPC: 망분리 그리고 테스트
      • 컨테이너 사전 지식
      • 화면 성능 개선 전 학습 테스트
      • SSM: Session Manager
      • SQL, 이 정도는 알아야지 😎
      • Subway-Map
        • 망 구성하기
        • 서버 구성하기
        • 화면 성능 개선하기
      • Conference Platform
        • 망 구성하기
        • 서버 구성하기
        • 화면 성능 개선하기
  • Tools
    • SOPS
    • Bruno
    • 🖥️FCK-NAT
    • 🧊Pulumi
Powered by GitBook
On this page
  1. Playgrounds
  2. Java Playground
  3. 숫자 야구 게임

학습 테스트

Previous숫자 야구 게임Next문자열 계산기

Last updated 11 months ago

Properties

2024.06.16

넥스트 스텝: 자바 플레이그라운드 - 숫자 야구게임

숫자야구게임 - 학습 테스트 실습


StringClass 학습 테스트


✅ 요구사항 1

  • "1, 2"을 ,로 split 했을 때 1과 2로 잘 분리 되는지 테스트 케이스 작성

  • "1"을 ,로 split 했을 때 1만을 포함하는 배열이 반환 되는지 테스트 케이스 작성

힌트 키워드

  • assertj contains()

  • assertj containsExactly()

내용

학습 키워드가 어떤 상황에 어떤 테스트 메서드로 검증 해야 하는지 명확하게 나와 있었기 때문에 어려운 내용이 없었다. 본 미션을 들어가기 전 미션을 진행 하는 방법을 알려주는 워밍업 단계 인 것 같다. 그럼에도 불구하고 Java 생태계에서 실무를 하고 있지 않았기 때문에 구글링을 바탕으로 미션을 해결 하고있다.

참고 자료

  • 검색 키워드: Google > "java assertj contains", "how to write unit test java"

✅ 요구사항 2

  • "(1,2)" 값이 주어졌을 때 ()을 제거하고 "1,2"를 반환하는 테스트 케이스 작성

힌트 키워드

  • String substring

내용

요구사항 1번을 해결 하면서 나름의 눈치를 배웠는지 어떠한 검색도 없이 바로 String 클래스의 substring에 접근 해서 원하는 데이터를 뽑은 후 검증을 진행 했다.

✅ 요구사항 3

  • "abc" 값이 주어졌을 때 특정 위치의 문자를 가져온 후 검증 하는 테스트 케이스 작성

  • IndexOutOfBound Exception 케이스 작성

  • DisplayName으로 테스트 케이스에 대한 내용 작성

힌트 키워드

내용

DisplayName 테스트 메서드를 보자마자 다른 테스트 케이스에도 모두 작성 해줬다. 기존에는 파이썬의 Docstring 형태로 주석을 달아서 사용 하려고 했지만 매우 유용한 메서드가 있었기 때문에 안 쓸 이유가 없었다.

힌트에 제공 해준 문서를 보자마자 바로 해결 할 수 있을 것 같다고 판단 했는데 문서에 명시 된 상황과 내가 작성하는 상황과 유사한 느낌이 들지 않아서 구글링을 한 번 더 하여 정확하게 키워드를 뽑아내었다. 결국 assertThatThrownBy 내부에서 실행 한 함수를 Exception 으로 잡은 뒤 체이닝 방식으로 검증을 이어나갈 수 있다는 걸 배웠다. 이렇게 되면 Given, When, Then 구조가 정확하게 나온다.

  • Given: "abc" 값

  • When: charAt(4) 을 assertThatThrownBy를 이용 하여 Exception객체로 변환

  • Then: isInstanceOf, hasMessageContaining 을 이용한 검증

참고 자료

  • 검색 키워드: Google > "Junit exception test"

SetCollection 학습 테스트


Fixture

    @BeforeEach
    void setUp() {
        numbers = new HashSet<>();
        numbers.add(1);
        numbers.add(1);
        numbers.add(2);
        numbers.add(3);
    }

✅ 요구사항 1

  • Fixture numbers의 size 메서드를 활용해 데이터 크기 검증

힌트 키워드

  • 없음

내용

워낙 간단한 코드이기도 하고, 요구사항이 명확했기 때문에 특별한 검색 없이 바로 검증을 할 수 있었는데 StringClass 학습 테스트 파일은 기존에 스켈레톤 코드 형식으로 작성 되어있는 부분이 있었다. 하지만, SetCollection 학습 테스트 파일은 Scratch로 다시 작성 해야했기 때문에 import 하는 내용이 이렇게 많았었나 싶었다.

참고 자료

  • 없음

✅ 요구사항 2

  • Fixture numbers의 contains 메서드를 활용해 데이터 존재 여부 검증

    • 단, 반복 되는 코드를 최적화 할 것

힌트 키워드

내용

Parameterized Test는 StringClass 학습 테스트 당시 사용 해봤기 때문에 내용을 어느정도 알고 있었다. 아는듯 한 느낌이 아닌 안다고 확신 할 수 있었기 때문에 해당 요구사항도 별 다른 검색 없이 진행 할 수 있었다.

참고 자료

  • 없음

✅ 요구사항 3

  • Fixture numbers의 contains 메서드를 활용해 데이터 유무 검증 및 예외 케이스(존재 하지 않는 데이터 일 때) 검증

힌트 키워드

  • Parameterized Test의 @CsvSource

내용

테스트 메서드에 Key, Value로 매핑되는 값을 받을 수 있어 정적인 데이터를 검증 할 때 편리했다. 그 중 처음 StringClass 학습 테스트 때 사용 했을 땐 delimiter 를 몰랐었던 터라 사용하지 않고 쉼표로 구분 했었는데 콜론으로 구분 할 수 있어서 가독성이 조금 더 나아진 것 같다.

참고 자료

  • 없음

📝
💻
source_code
AssertJ/contains
given-when-then/TestCase
AssertJ Exception Assertions 문서 링크
assertThatThrownBy
Parameterized Test