💻
Albert's Til
GitHub
  • 매일매일 조금씩 성장하기
    • README
    • CS
      • Network
      • HTTP
        • NO-CACHE
      • 오류 코드
      • ORM 도구
      • Design Pattern
        • CQRS Pattern
          • Event Sourcing and CQRS pattern
        • Builder Pattern
    • DB
      • MySQL
        • Timeline
        • Pagination
        • Index
        • Database Performance Optimization Strategies
        • B+ tree
        • MySQL Connectors VS MySQL Shell(Scripting) VS MySQL Workbench
        • MySQL Storage Engine Architecture
      • Normalization & Denormalization
      • JPA
        • @Transactional
        • Why JPA?
        • About JPA
        • N+1 Issue
        • Index
        • ElementCollection&CollectionTable
        • orphanRemoval
        • CascadeType
        • Use Subselect
        • Dynamic Instance Creation
        • Paging
        • Order
        • Spefication
        • mappedBy
      • MongoDB
        • ObjectId
      • Why MySQL?
      • ACID properties of transactions
      • Between JPA and JDBC
      • Identifiers in Hibernate/JPA
    • Java
      • Jackson de/serialize
      • Collections.singletonList() vs List.of()
      • Manage dependencies in Gradle
      • Logging Level
      • Bean Validation
      • JVM Internals
        • Threads
          • Frame
        • Shared Between Threads
          • Classloader
            • Class Loader Hierarchy
            • Loading Linking Initialization
      • Java Collection Framework
      • Annotation
      • Generic
      • 디미터 법칙
    • Spring
      • Caching
      • Spring Integration Overview
        • ThreadPollTaskExecutor
        • Messaging Bridge
        • Channel Adapter
        • Poller
        • Configuration and @EnableIntegration
        • Message Endpoints
        • Message Channels
      • HATEOAS
      • @Autowired vs Constructor Dependency Injection
      • Spring Security
        • JWT 토큰 사용한 인가
        • OAuth 2 Login
        • OAuth 2 인증
        • 인가
        • 인증
        • PasswordEncoder
      • IoC Container
      • Filter,Interceptor,AOP,Argument Resolver
      • Spring Annotation
      • About Spring
    • Kafka
      • Error Channel
    • Infra
      • Scale Up || Scale Out
      • Docker
        • Dockerfile
        • Docker Hub Deploy
        • Command
      • Cloud 유형
        • Infrastructure as a Service
        • Platform as a Service
        • Software as a Service
      • 무중단 배포
        • 엔진엑스(Nginx)
      • 코드 자동 배포
        • Technical
      • AWS EC2
        • PEM(Privacy Enhanced Mail) 키
      • AWS RDS
      • AWS S3
    • CodeSquad
      • Spring Boot Project 1주차 회고
      • Spring Boot Project 2주차 회고
      • Spirng Boot Project 3주차 회고
      • Spring Boot Project 4주차 회고
    • Foody Moody 프로젝트
      • Query Performance Comparison
      • HeartCount Asynchronous Issue
      • DeferredResult
      • ResponseBodyEmitter
      • SseEmitter (Spring)
      • Server-Sent Events (SSE)
      • 기술 스택 적용 이유
      • NO-CACHE(HTTP)
      • Transactional
    • DDD
      • AggregateId
    • Test
      • RestAssured
    • Coding and Algorithmic Problems
      • 819. Most Common Word
      • 344. Reverse String
      • 125. Valid Palindrome
      • 937. Reorder Data in Log Files
    • Node
      • Async... Await...
      • Custom Transactional Decorator Challenger
    • Python
      • Python Basic Grammar
        • Comments and Input/Output
        • Variable
        • Data type
        • Operations and syntax
        • List,Tuple,Dictionary,Set
        • Function
        • Conditional statement
        • Loop
    • HTML
      • HTML Basic
      • HTML Basic Tags
      • HTML Form Tags
      • HTML Table Tags
    • CSS
      • CSS Basic
      • CSS Practice
Powered by GitBook
On this page
  • 1. Identifiers in Hibernate/JPA
  • 2. Logging Level
  • 3. Filter,Interceptor,AOP,Argument Resolver
  • 4. Gradle에서 종속성(Dependency)을 관리
  • 5. Mock 과 Stub
  • 6. 모킹(Mocking) 프레임워크에서의 given과 when

Was this helpful?

  1. 매일매일 조금씩 성장하기
  2. CodeSquad

Spring Boot Project 4주차 회고

Last updated 2 years ago

Was this helpful?

1. Identifiers in Hibernate/JPA

2. Logging Level

3. Filter,Interceptor,AOP,Argument Resolver

4. Gradle에서 종속성(Dependency)을 관리

5. Mock 과 Stub

Mock과 Stub은 테스트 더블(Test Double)의 일종으로, 테스트 환경에서 독립적으로 실행 가능한 가짜 객체를 생성하는 데 사용됩니다. 각각의 사용 시기는 다음과 같습니다:

Mock:

  • 객체 간의 상호작용을 테스트하고 검증하기 위해 주로 사용됩니다.

  • 객체 간의 메서드 호출, 상태 변경, 예외 발생 등을 검증할 수 있습니다.

  • 실제 객체의 동작을 흉내내기 때문에, 호출되어야 하는 메서드와 호출 횟수, 매개변수 등을 정확히 검증할 수 있습니다.

  • 특정 메서드 호출에 대한 반환 값을 정의하지 않습니다. 대신, 예상된 메서드 호출이 이루어졌는지 검증합니다.

Stub:

  • 특정 메서드 호출에 대한 예상된 반환 값을 정의하기 위해 사용됩니다.

  • 실제 객체의 동작을 대체하여 원하는 결과를 반환합니다.

  • 호출된 메서드에 대해 고정된 반환 값을 제공하거나, 입력에 따라 다른 결과를 반환하는 등의 동작을 정의할 수 있습니다.

  • 객체 간의 상호작용을 검증하는 것보다는, 메서드 호출 시 올바른 반환 값을 받는지 확인하는 데 더 중점을 둡니다.

일반적으로 Mock은 객체 간의 상호작용을 검증하고 Stub은 메서드 호출에 대한 예상된 반환 값을 정의하는 데 사용됩니다. Mock은 객체 간의 상호작용을 중심으로 검증하며, Stub은 메서드 호출의 반환 값을 조작하여 특정 시나리오를 재현하는 데 사용됩니다.

하지만 Mock과 Stub은 상황에 따라 유연하게 사용될 수 있으므로 엄격한 규칙은 없습니다. 테스트의 목적과 필요에 따라 Mock과 Stub을 조합하여 사용할 수도 있습니다. 중요한 것은 테스트 시나리오에 맞게 올바른 도구를 선택하고, 목적에 맞게 Mock과 Stub을 활용하는 것입니다.

6. 모킹(Mocking) 프레임워크에서의 given과 when

given과 when의 주요한 차이점은 다음과 같습니다.

  1. given: 모의 객체의 상태나 동작을 설정하는 데 사용됩니다. 특정 메서드 호출 또는 상황에서 모의 객체가 어떻게 동작해야 하는지를 정의합니다. 일반적으로 given 절에서는 when 절에서 발생할 것으로 예상되는 메서드 호출에 대한 응답을 설정합니다.

  2. when: 실제 테스트 동작을 수행하는 데 사용됩니다. 모의 객체를 호출하고 예상한 동작이 발생하는지 확인합니다. when 절은 테스트 동작의 일부로 실제로 실행되는 코드를 포함합니다.

간단한 예를 통해 설명하겠습니다. 가정해봅시다.

javaCopy codepublic interface MyService {
    int calculate(int a, int b);
}

// 모의 객체 생성
MyService myServiceMock = Mockito.mock(MyService.class);

// given
Mockito.when(myServiceMock.calculate(2, 3)).thenReturn(5);

// when
int result = myServiceMock.calculate(2, 3);

// 결과 확인
System.out.println(result); // 5

위의 예시에서 given 절에서 calculate(2, 3) 메서드가 호출되었을 때 반환할 값을 설정했습니다. 그리고 when 절에서 실제로 calculate(2, 3) 메서드를 호출하고 반환된 값을 result 변수에 저장했습니다. 마지막으로 result 값을 확인하여 모의 객체의 동작이 예상대로 수행되는지 확인했습니다.

요약하자면, given은 모의 객체의 동작을 설정하고, when은 실제 동작을 수행하여 테스트 결과를 확인하는 데 사용됩니다.

\

Identifiers in Hibernate/JPA
Logging Level
Filter,Interceptor,AOP,Argument Resolver
Manage dependencies in Gradle