본문 바로가기
반응형

Develop/Java+Kotlin61

[Kotest] Kotest 활용 간단 가이드 Kotest란? 🤔 공식 사이트에 가보면 Kotest를 아래와 같은 말로 표현하고 있다.Kotest is a flexible and elegant multi-platform test framework for Kotlin with extensive assertions and integrated property testing 위의 말을 보면 총 3가지 정도의 기능을 제공하고 있다. 각 기능들을 독립적으로 사용할 수 있는데, 이는 Kotest가 독립적으로 나뉜 여러 개의 하위 프로젝트들로 구성되어 있기에 가능한 일이다. (3가지 기능을 모두 사용하고 싶다면 의존성도 각자 추가해야 한다는 의미이다.) 일단 어떤 기능들을 제공하고 있는지부터 살펴보자. 1. 유연하고 우아한 멀티 플랫폼 테스트 프레임워크다.👉 .. 2024. 10. 27.
[Java] compiler message file broken 에러 compiler message file broken: key=compiler.misc.msg.bug arguments=11.0.13, {1}, {2}, {3}, {4}, {5}, {6}, {7} java.lang.AssertionError: Incorrect number of arguments; expected 4, found 0 에러 에러 발생 코드 에러가 발생한 코드를 살펴보자면 아래와 같다. REST API 호출 시 발생하는 예외를 executeApi() 메서드를 통해 공통적으로 처리했다. 이 코드 중에서 ParameterizedTypeReference(){} 부분에서 에러가 발생했다. @Slf4j @RequiredArgsConstructor @Service public class AuthUserA.. 2024. 3. 17.
[Mockito] Invalid use of argument matchers! 에러 😱 에러 발생 org.mockito.exceptions.misusing.InvalidUseOfMatchersException: Invalid use of argument matchers! 2 matchers expected, 1 recorded 에러 아래와 같은 테스트 코드를 실행시키다 위와 같은 에러 로그를 만났다. var service = mock(MemberFindService.class); verify(service).findByIdAndName(anyLong(), "yeonlog"); 에러를 해석해보자면 argument matchers를 잘못 사용했다. 2개의 matcher가 예상되었지만, 1개만 존재한다. 이 의미를 이해하기 위해서는 argument matchers가 무엇인지 먼저 알아야한다... 2023. 9. 27.
[Java] UnaryOperator란? 📚 UnaryOperator란? : Java에서 제공하는 함수형 인터페이스 인수(argument)와 반환 결과(return)가 동일한 타입을 가진 경우에 사용하는 특수한 Function Java 8 부터 사용 가능 함수형 인터페이스란? * = SAM Interface = Single Abstract Method Interface * 1개의 추상 메서드를 가진 인터페이스 * UnaryOperator 외에도 Predicate, Consumer, Function 등이 있다. UnaryOperator의 코드를 살펴보면 Function를 상속받고 있는 것을 볼 수 있다. 제네릭 부분을 살펴보면 인수와 반환 결과 모두 동일한 타입으로 취급하는 것을 볼 수 있다. @FunctionalInterface public .. 2023. 6. 26.
[Kotest] 오버로딩한 메서드 테스트하기 (feat: slot) 현재 우리 팀에서는 모종의 이유로 애플리케이션 코드는 Java, 테스트 코드는 Kotest로 작성하고 있다. 오늘은 테스트 코드를 작성하다 겪은 일에 대해 작성할 예정이다. (예제 코드는 문제 상황과 유사하게 만든 코드일 뿐, 실무 코드와는 관련이 없습니다.) 자바에서는 한 클래스 내에서 이름이 같은 메서드를 중복으로 정의할 수 없다. 하지만 '메서드 오버로딩'을 통해 매개변수의 개수나 타입 등을 다르게 하면 같은 이름의 메서드를 작성하는 것이 가능하다. 메소드 내부 구현은 상황에 따라 달라지겠지만 오늘은 아래와 같은 코드에 대한 테스트 코드를 작성하려고 한다. public class Order { public void order(OrderRequest orderRequest) { order(orderR.. 2023. 3. 5.
[Java] replaceAll 대신 replace 사용하기 🙂 개요 String에서 흔히 사용하는 메서드 중에서는 replaceAll라는게 있다. 다들 알다시피 replaceAll은 특정 문자를 다른 문자로 대치할 수 있게 해주는 아주 편리한 메서드이다. 그러다 replaceAll보다는 replace를 사용하는 것이 좋다는 이야기를 듣게 되어 사실인지 살펴보기 위해 해당 포스팅을 작성하게 되었다. 🤓 간단 테스트 먼저 replace에 대해 흔히 하는 오해를 바로 잡고 가야한다. replaceAll 메서드가 따로 있다보니 replace는 일치하는 첫 부분 또는 일부만 대체해 주는건가? 라고 착각할 수 있다. 예를 들어 A를 B로 대체한다고 가정할 때, AA가 BA로 대체될 거라고 착각한다. 하지만 실제로는 BB로 대체된다. (참고로 여러 일치하는 문자열 중 첫 부.. 2023. 1. 22.
[Java] 동시성 이슈 해결하기 (1) 같은 계좌를 이용하는 A와 B라는 이용자가 있다고 가정한다. 동일한 시간에 A는 카드를 이용해 상품을 결제했고, B는 은행 어플을 통해 계좌이체를 했다. 대략의 플로우를 상상해보면 아래와 같다. A와 B는 같은 시간에 잔액을 조회했다. A는 40,000원을 결제하여 계좌에 남은 잔액인 60,000원을 반영하였다. 같은 시각, B는 20,000원을 계좌 이체하였다. B의 처리 속도가 약간 늦어져 A가 계산된 금액 반영을 한 뒤에야 B의 계산된 금액을 반영했다. 한 계좌에서 각각 40,000원과 20,000원이 결제되었으니 잔액은 40,000원이 남아야한다. 하지만 현재 80,000원이 남은 상태임을 확인할 수 있다. 이는 계좌라는 같은 자원에 여러 사람이 동시에 접근하기 때문에 발생하는 문제이다. 다양한 .. 2022. 12. 9.
[Java] volatile 키워드 (feat. Atomic & Concurrent) 😵 서론 멀티 스레드로 인한 동시성 문제를 해결하기 위해 Java는 synchronized 키워드와 Atomic 타입이 있다고 알려져있다. 그런데 Atomic 타입은 왜 Thread-safe하다고 할까? 이 이유에 대해서 찾다가 volatile이라는 키워드에 대해 알게 되었다. 이번 포스팅에서는 해당 키워드에 대해 파헤쳐보려고 한다. 😎 Atomic & Concurrent & volatile 예제를 살펴보기 위해 AtomicInteger의 내부 코드를 가져왔다. 특별할 것 없어 보이지만 value에 volatile이라는 키워드가 붙는다는 점이 눈에 띈다. AtomicBoolean, AtomicLong도 살펴봤는데 모두 volatile 키워드가 붙었다. public class AtomicInteger ex.. 2022. 11. 9.
[Java] Thread Pool 이해하기 📚 함께 읽으면 좋은 글 프로세스와 스레드 Thread 이해하기 📑 목차 Green Thread vs Native Thread Java는 어떤 스레드를 사용하는가 Thread Pool 💥 Green Thread vs Native Thread 🔸 Green Thread = Virtual Thread User Level Thread OS가 아닌 library 또는 Virtual Machine에 의해 다뤄지는 스레드 기본 OS 기능에 의존하지 않고 다중 스레드 환경을 모방 실제로 여러 코어에서 사용하는 것은 불가능 차단 시스템 호출 시 같은 프로세스 내의 모든 스레드가 차단됨 🔸 Native Thread = Non-Green Thread Kernel Level Thread OS에 의해 다뤄지는 스레드 ❓ Ja.. 2022. 9. 12.
반응형