반응형

전체 글 68

unitTest - Reactor-test

Reactor testJUnit으로 테스트를 작성하고, mockito 를 이용해서 mock 객체를 만들어서 일반적인 테스트를 작성할 수 있지만, 비동기 non-blocking 환경에서의 테스트는 불가능하다.비동기 non-blocking 테스트를 위해 Reactor에서는 Reactor-test 모드를 지원한다. StepVerifier StepVerifier를 사용하면 Publisher가 제공하는 다양한 이벤트를 차례로 검증할 수 있고, Publisher를 create해서 테스트 환경을 준비한다. 그 후, 여러가지 메서드들을 체이닝해서 이벤트를 확인할 수 있다. public class StepVerifierTest { @Test void test1() { Flux flux = Fl..

테스트코드 2024.05.28

unitTest - Mockito

MockitoJava에서 가장 많이 사용되는 mocking 프레임워크이며, mock, spy, stubbing, verify ..등 여러 기능들을 제공한다.Mock 객체는 특정 인터페이스 혹은 클래스의 모든 메서드를 갖는 모의 객체를 뜻하며 Stubbing을 통해서 주어진 상황에서 특정 액션을 수행하거나 특정 값을 반환하는 객체를 뜻한다.Mock 객체 생성mock static 메서드를 통해서 생성 가능하며, 인자를 넘기지 않거나 mocking 하려는 클래스의 Class를 전달한다. reified를 가변인자로 넘기는것처럼 보이지만 제네릭을 통해서 mocking 하려는 클래스 혹은 인터페이스를 감지하기 위한 트릭이다./* * @Param reified don't pass any values to it. * ..

테스트코드 2024.05.26

JUnit - Assertions 조건부 실행

테스트 조건부 실행테스트 해야하는 클래스가 소수라면 Assumptions에서 제공하는 메서드들을 사용해서 테스트 실행을 막을 수 있겠지만, 규모가 커지거나 테스트할게 많아진다면 코드 가독성도 떨어지게 된다.JUnit에서는 상황에 따라 테스트를 조건에 맞게 실행할 수 있는 어노테이션들을 제공해준다. @DisabledDisabled 어노테이션이 붙은 테스트는 무조건 실행 계획에서 제외한다. 이는 Assumptions와 동일하게 무시되며, 메서드가 아니라 클래스 레벨에도 적용이 가능하다.@Disabled를 사용할때 value라는 메서드를 통해서 이유를 명시할 수 있는데 JUnit 개발팀에서는 간단하게라도 이유를 추가하는 것을 권장하고 있다. import org.junit.jupiter.api.Disable..

테스트코드 2024.05.20

JUnit - Assertions 실행 메서드

Assertions에서 제공하는 실행 메서드실행 기반의 Assertions란 익셉션을 Throw 했는지, 혹은 Exception을 Throw 하지 않고 제대로 통과가 되었는지를 확인할 수 있는 메서드다.assertAll여러 Executable을 인자로 받고 실행하여 모든 Executable이 Exception을 throw하지 않는지 검증한다. 이 때, Exception을 throw하는 Executable이 하나라도 있다면 실패처리되며 여러 Executable을 가변인자, Collection, Stream 형태로 전달한다. import com.example.springtest.jUnit.assertions.comparison.annotation.TestToFail;import org.junit.jupit..

테스트코드 2024.05.17

JUnit - Assertions 비교 메서드

AssertionsAsssertions는 테스트 케이스의 결과를 검증하는 메서드를 제공하는 클래스다. fail무조건 테스트 케이스를 실패로 만드는 메서드이며, 인자로 Throwable을 제공할 수 있다. import com.example.springtest.jUnit.assertions.annotation.TestToFail;import static org.junit.jupiter.api.Assertions.fail;@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)@Testpublic @interface TestToFail {}public class FailExampleTest { @TestToFail void test1() {..

테스트코드 2024.05.16

JUnit - Test와 생명주기 메서드

JUnitJava에서 가장 많이 사용되는 테스트 프레임워크이며, 테스트에 필요한 기능들을 제공하고 테스트 시나리오 작성을 지원한다.JUnit5는 JUnit Platform, JUnit Jupiter, JUnit Vintage로 구성된다.JUnit PlatformJVM에서 테스트 프레임워크를 실행하기 위한 기반을 제공한다.개발자가 작성한 테스트를 찾고 실행 계획을 생성하는 TestEngine 인터페이스가 정의되어 있고, 이를 기반으로 JUnit의 버전과 상관없이 테스트 실행이 가능하다.IDE, 빌드툴, 등도 함께 지원한다.JUnit JupiterJUnit의 버전이 변경되면 해당 버전만의 기능이나 어노테이션 등을 제공하는 역할을 하는게 JUnit Jupiter의 역할이다.JUnit Platform의 Test..

테스트코드 2024.05.16

단위테스트란?

단위 테스트(unit test)개발자가 작성한 가장 작은 단위를 검증하는 테스트 기법을 단위 테스트라고 한다.단위는 객체와 메소드를 카리키며, 각각의 객체와 메소드가 올바르게 동작하는지 검증하고 예외적인 상황엥서 적절하게 동작하는지 확인한다.단위 테스트 5가지 원칙 F.I.R.S.TClean code의 저자인 Robert Martin이 제시한 규칙으로, 효과적인 단위 테스트를 위한 5가지 원칙을 제시했다.Fast : 단위 테스트는 빠르게 실행되어야 한다.여러 항목에 대해서 여러 번 수행이 되기 때문에 한 번의 실행 속도가 전체에 큰 영향을 준다. 그래서 단위 테스트가 빠를수록 개발 프로세스에 방해를 주지 않기 때문에 더 자주 실행할 수 있다.더 빠른 속도를 위해 가능한 인프라, 외부 호출, DB에 의존하..

테스트코드 2024.05.16

Reactor - Publisher, Subscriber

ReactorReactive streams를 구현한 비동기 데이터 스트림 처리를 지원한다.Spring webflux에서 메인으로 사용되며, backpressure를 제공하여 안정성을 높이고 다양한 연산자로 다양한 연산들을 조합하여 가독성을 증대시킨다. 데이터는 소스(Publisher)에서 나와서 소비자(Subscriber)에게 전달된다. 데이터는 다양한 변형과 중간 단계를 거치게되고 중간 부품을 모으는 더 큰 조립 라인의 일부가 된다.한 지점에서 결함이 발생하거나 처리가 불가능해진다면 업스트림에 신호를 보내서 흐름 제한도 가능하다. Reactor PublisherReactor에서 Mono와 Flux를 제공한다. CorePublisher는 reactive streams의 Publisher를 구현하며, ..

Netty - ChannelHandler

ChannelHandlerChannelHandler는 Channel의 I/O 이벤트를 처리하거나 I/O 작업을 수행하는 핸들러다. ChannelInboundHandler : Channel I/O 이벤트를 수행한다.ChannelOutboundHandler : Channel I/O 작업을 수행한다.ChannelDuplexHandler : ChannelInboundHandler, ChannelOutboundHandler 모두를 구현한 핸들러다. ChannelInboundHandlerinbound I/O 이벤트를 처리하기 위한 handler channelRegistered : channel이 eventLoop에 등록되는 경우channelUnregistered : channel이 eventLoop 에서 제거되..

Netty - Channel

ChannelNetty에서 중요한 역할을 하는 channel은 JavaNIO에서 사용되는 Channel과 비슷한 역할을 가진다.Netty에서의 channel은 pipeline, channelFuture 기능을 추가하여 channel에서 IO 연산이 완료 되었을 때 리스너를 추가하거나 결과를 조회할 수 있는 기능을 제공한다.ChannelFutureimport io.netty.util.concurrent.GenericFutureListener;import java.nio.channels.Channel;public interface ChannelFuture extends Future { /* * Returns a channel where the I/O operation associated with..

반응형