test 17

int 와 long

코딩 테스트를 하다보면 코드 문법상에는 문제가 없어 보이지만 error 가 나는 경우가 있다. 아래 코드가 그와 같은 경우이다. 숫자로 이루어진 문자열 t와 p 가 주어질 때 … 프로그래머스의 크기가 작은 부분 문자열 문제를 참고하시길 바람 1 ≤ p의 길이 ≤ 18 p의 길이 ≤ t의 길이 ≤ 10,000 t와 p는 숫자로만 이루어진 문자열, 0으로 시작 안함 처음엔 문제를 읽고 전부 int 타입으로 코딩을 해서 제출 했다. → 몇몇 테스트에서 RuntimeError 발생! 이유를 찾는데 한참이 걸렸다… 제한사항의 1번에 p가 1~18까지가 아닌 p의 길이가 18까지 였다. int 는 최대 10자리 까지만 사용이 가능하다.. 따라서 p를 파싱하는 변수는 모두 long 으로 갔어야 한다...

JAVA 2022.12.27

Mock 객체 확인

verify(검증) 메소드를 이용하여 특정 메소드가 실행이 됐는지, 몇번 실행됐는지, 실행이 안됐는지 등 검증을 해볼 수 있다. verify 예제 @Test public void pratice(){ StudyService studyService = new StudyService(memberService, studyRepository); assertNotNull(studyService); Study study = new Study(10, "test"); Member member = new Member(); member.setId(1L); member.setEmail("eunjia190@gmail.com"); when(memberService.findById(1L)).thenReturn(Optional.of..

JAVA 2022.12.15

Mock 객체 stubbing

모든 Mock 객체의 행동 Null 을 리턴한다.( Optional 의 경우에는 Optional.empty 리턴 ) Primitive 타입은 기본 Primitive 값 콜렉션은 비어있는 콜렉션 void 메소드는 예외를 던지지 않고 아무런 일도 발생하지 않는다. stubbing 예제 : when 을 사용하여 findById에 1을 호출하면 member 값을 return 받게 작성해보았다 @Test void createStudyService(){ StudyService studyService = new StudyService(memberService, studyRepository); assertNotNull(studyService); Member member = new Member(); member.setI..

JAVA 2022.12.15

Mockito

mockito 는 mockito-core 와 mockito-junit-jupiter 두가지 의존성을 추가해줘야하는데 애초에 spring boot 프로젝트로 생성을 하면 자동으로 주입되어 있다. 직접 추가하려면 maven repository에서 추가! mockito는 쉽게 말해서 가짜 객체를 만들어 준다고 생각하자! 현재 MemberService는 interface 만 있고 구현되어있진 않다. 이럴때 test code 작성시 MemberService 에 가상의 Mock 인스턴스를 직접 만들어서 사용해야한다. @ExtendWith(MockitoExtension.class) // 이 어노테이션이 있어야 제대로 Mock이 동작한다. class StudyServiceTest { @Mock MemberService..

JAVA 2022.12.14

JUnit5 Assertions

1. assertAll 만약 assertAll을 안쓰면 assertEquals이 실패하면 assertTrue는 실패인지 성공인지 모른다. 따라서 한번에 테스트 결과를 확인하고 싶으면 assertAll로 묶자! → 보통은 여러개 테스트중 하나만 실패해도 다음 테스트를 진행할수 없지만 assertAll은 실패해도 다음 테스트를 진행 할 수 있다.(에러를 한번에 볼수가 있다.) @Test @DisplayName("스터디 만들기") void create_new_study() throws Exception { Study study = new Study(-10); assertAll( () ->assertNotNull(study), () ->assertEquals(StudyStatus.DRAFT, study.getS..

JAVA 2022.12.14

JUnit5 기본 annotation

JUnit5 test에 사용할 수 있는 기본 annotation @Test @BeforeAll / @AfterAll : 모든 테스트 실행 전 혹은 실행 후 딱 한번씩만 실행됨 @BeforeEach / @AfterEach : 각각 테스트들 마다 실행 전 / 실행 후에 매번 실행됨 @Disabled : 여러개의 테스트 메소드중 제외 하고 싶은것에 붙여줌 package me.whiteship.inflearnthejavatest; import org.junit.jupiter.api.*; import static org.junit.jupiter.api.Assertions.*; class StudyTest { // junit5 부터 public 이 안붙어도됨 @Test void create() throws Exce..

JAVA 2022.12.14

문자열 내 마음대로 정렬하기

문자를 문자열로 변환하기( string to char[] || string to string[] ) string to char[] → toCharArray() 이용 string to string[] → {문자}.split(””) 이용 for(int i=0; i< strings.length; i++){ // 문자를 문자열로 변환 char[] chr = strings[i].toCharArray(); // 문자열 중 주어진 인덱스 위치에 있는 문자를 다시 string으로 변환 String str = Character.toString(chr[n]); // map에 key값은 중복이 안됨 참조 하고 있기 때문에! // 따라서 for문 안에 선언해주어 계속적으로 초기화한다. Map map = new HashMap(..

CT 2022.08.25

애플리케이션 테스트 DB 구분

docker 사용하여 애플리케이션 DB 생성 # docker 로 postgres 컨테이너 실행 # -e 는 환경변수 설정 POSTGRES_PASSWORD를 pass로 사용하겠다. # 마지막 postgres가 이미지 docker run --name ndb -p 5432:5432 -e POSTGRES_PASSWORD=pass -d postgres # docker 컨테이너 들어가기 docker exec -i -t ndb bash su - postgres # db 접속 psql -d postgres -U postgres 우리는 애플리케이션에서 postgresql을 사용하고 test에서는 h2 DB를 사용해야한다면? test 에 관한 설정파일을 따로 만들어줘야한다! 1. test 디렉토리 하위에 resources..

JAVA 2022.08.18

error serializer

json → object로 변환하는과정 (deserialization) object → json로 변환하는과정 (serialization) 객체는 javaBean 스펙을 준수하고 있어서 BeanSerializer로 json으로 변환이 가능하다. but, errors는 그 스펙을 준수하고 있지 않아 json으로 변환하려면 직접 serializer를 생성해줘야한다. 만약 아래처럼 테스트 코드 작성 시 jsonPath에 지정해준 필드를 응답값으로 받고싶다는 것이다.(Errors에서) 하지만 Errors는 json으로 변환이 불가하기 때문에 ErrorSerializer를 생성해준다. this.mockMvc.perform(post("/api/events") .contentType(MediaType.APPLICAT..

JAVA 2022.07.11