반응형

테스트코드 10

sliceTest - WebTestClient

WebTestClientspring-webflux에서 통신객체로 사용되는 webclient와 유사하며, webClient에서 제공되는 메서드를 동일하게 사용할 수 있고 WebTestClient는 별도의 생성 메서드와 body, cookie, header, status 검증 메서드를 제공한다. WebTestClient 생성webTestController를 생성할 수 있는 방법은 총 5가지가 있다. bindToController : controller들을 제공하여 WebTestClient를 생성한다. bindToRouterFunction : RouterFunction들을 제공하여 WebTestClient를 생성한다.bindToApplicationContext : ApplicationContext 내의 b..

테스트코드 2024.06.13

sliceTest - ContextConfiguration, Mock Bean

Slice TestController는 http 요청을 받아서 처리하는 레이어에 해당하며 프레젠테이션 레이어라 하고,Repository는 데이터베이스에 연결하여 데이터의 조회, 저장, 수정, 삭제 등의 CRUD를 수행하는 데이터 엑세스 레이어에 해당한다.@ExtendWith(MockitoExtension.class)public class UserRepositoryTest { @Mock UserR2dbcRepository userR2dbcRepository; @Test void when_find_by_id_returns_user_mono() { // given var user = new UserEntity(1L, "taeil", 20, "1", "1234");..

테스트코드 2024.06.11

Private Method Test

Private Method Testprivate 메서드는 테스트를 해야할까?https://shoulditestprivatemethods.com 이 사이트로 들어가면 정답이 있다.사이트에 접속하면 NO 라는 글자가 나오고, 개발자 도구를 열면 주석으로 비공개 메서드 테스트를 고려할 때마다 코드에서는 책임을 제대로 할당하지 않았다는 메세지를 표시한다. 라는 문구가 적혀있다. private 메서드는 테스트하면 안된다는 뜻이다. 그래서 테스트하면 왜 안 되어요??private 메서드를 테스트하면 안되는 이유는 테스트 대상이 되는 클래스 입장에서 테스트 클래스는 일반적인 클래스들과 마찬가지로 caller에 해당한다. caller에게 private 메서드를 노출하지 않는 것처럼 또한 테스트 클래스에게도 priva..

테스트코드 2024.05.29

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
반응형