
일단, 복습하면서 연산자가 다른데 쓰일 수가 없는데, 대입연산자만 다른데 쓰일 수가 있다. 전부 메소드 내에 있어야 한다. 메소드 또는 함수가 왜 필요한가요? => 코드의 재사용성 때문에! 1.주고 받고 (리턴값 o, 매개변수 o) 2.주고 안받고(리턴값 o, 매개변수 x) 3.안주고 받고(리턴값 x, 매개변수 o) 4.안주고 안받고(리턴값 x, 매개변수 x) 형태 1. 주고 받고 Int abc(int a,…..){ return 자료형 int } 2. 주고 안받고 // Get Int abc(){ return 자료형 int } 3. 안주고 받고 // Set Void abc(int a,….){ } 4. 안주고 안받고 // 출력 Void abc(){ } 예시 1. 주고 받고 : 식당 => 돈 줬으니까 음식이 ..
1. JUnit 자바 진영의 대표적인 Test FrameWork 단위 테스트를 위한 도구를 제공 단위 테스트란? 코드의 특정 모듈이 의도된 대로 동작하는지 테스트하는 절차를 의미 모든 함수와 메서드에 대한 각각의 테스트 케이스를 작성하는 것 어노테이션을 기반으로 테스트를 지원. 단정문(Assert)로 테스트 케이스의 기댓값에 대해 수정 결과를 확인할 수 있음. JUnit 5는 크게 Jupiter, Platform, Vintage 모듈로 구성됨 2. JUnit LifeCycle Anotation 어노테이션 설명 @Test 테스트용 메소드를 표현하는 어노테이션 @BeforeEach 각 테스트 메소드가 시작되기 전에 실행되어야 하는 메소드를 표현 @AfterEach 각 테스트 메소드가 시작된 후에 실행되어야 ..
초안 @Test @DisplayName("게시글 삭제 성공 테스트") void deleteBoard() { //given Board board = mock(Board.class); User user = mock(User.class); when(boardRepository.findById(board.getId())).thenReturn(Optional.of(board)); when(Optional.of(board).get().checkBoardWriter(user)).thenReturn(true); //when boardService.deleteBoard(board.getId(),user); //then verify(boardRepository).deleteById(board.getId()); } } 부연..
초안 @Test @DisplayName("게시글 목록 불러오기 테스트") void getBoards() { // given Pageable pageable = mock(Pageable.class); PageDto pageDto = mock(PageDto.class); when(pageDto.toPageable()).thenReturn(pageable); when(boardRepository.findAll(pageable)).thenReturn(Page.empty()); // when Page pagingProductResponse = boardService.getBoards(pageDto); // then assertThat(pagingProductResponse).isNotNull(); } @Test ..
초안 @Test @DisplayName("게시글 업데이트 성공 테스트") void updateBoard() { // given User user = mock(User.class); Board board = mock(Board.class); BoardRequestDto boardRequestDto = mock(BoardRequestDto.class); when(boardRepository.findById(board.getId())).thenReturn(Optional.of(board)); when(Optional.of(board).get().checkBoardWriter(user)).thenReturn(true); // 이 두 줄은 깡통에게 "이런 질문이 오면 무조건 이렇게 대답해" 하고 명령을 넣어놓는 ..
일단은 생성 성공 테스트부터 초안 @ExtendWith(MockitoExtension.class) class BoardServiceImplTest { @Mock BoardRepository boardRepository; @InjectMocks BoardServiceImpl boardService; @Test @DisplayName("게시글 생성 성공 테스트") void createBoard() { BoardRequestDto requestDto = BoardRequestDto.builder() .title("title1") .content("content1") .build(); User user = mock(User.class); //when boardService.createBoard(requestDt..
전체 코드(한꺼번에 연달아서 붙여넣기) 컨트롤러 @RestController @RequestMapping("/boards") @RequiredArgsConstructor public class BoardController { private final BoardService boardService; private final SetHttpHeaders httpHeaders; // 게시글 생성 @PostMapping public ResponseEntity createBoard( @RequestBody BoardRequestDto boardRequestDto, @AuthenticationPrincipal UserDetailsImpl userDetails) { boardService.createBoard(boar..
일반적으로 컨트롤러에는 별도의 로직이 없다. 서비스를 부르는 게 그냥 단순함. 스프링은 컨테이너다. @Conponent 는 스프링 보고, "이 객체를 관리해줘" 라고 말하는 것이다. 객체는 일반적으로 new 붙이고 사용하는데, 여기서는 그냥 쓰고 있다. private final SetHttpHeaders httpHeaders; 이게 스프링의 역할. 스프링이 객체를 만들어서 넣어줬어. setHeaderTypeJson() 이걸 매번 쓰고 있으니까 아예 클래스로까지 빼서 이것만 사용하게 만들 수 있도록 해 둔 것 같다. 이걸 클래스에서 객체로 만들지 않고 그냥 static으로 만들면 어디서든 쓸 수 있으니까, static으로 리펙토링 하는 것을 고려해보도록. UserDetails는 사용자 정보 관련 시큐리티다..