묻고 답해요
160만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링부트 JUnit 테스트 - 시큐리티를 활용한 Bank 애플리케이션
jwt + OAuth2 문의
안녕하세요 현재 jwt 코드 리뷰 까지 듣고수업 코드를 참고해 oauth2 + jwt를 만들어보고 있는데요응답한 jwt토큰이 요청 헤더에 포함되지 않는 문제를도무지 해결하지 못해서 질문드립니다 ㅠㅠ OAuth2 로그인-> loadUser에서 유저 정보를 받아 임시 세션에 저장 -> 핸들러에서 토큰 생성후 응답. 순서로 만들었습니다. OAuth2User 구현체에 유저 정보 세팅해 임시 세션에 저장시켰습니다.@Service public class CustomOauth2UserService extends DefaultOAuth2UserService { @Override public OAuth2User loadUser(OAuth2UserRequest userRequest) throws OAuth2AuthenticationException { OAuth2User oAuth2User = super.loadUser(userRequest); UserEntity userEntity = new UserEntity(); userEntity.setProvider(userRequest.getClientRegistration().getClientName()); userEntity.setUsername(oAuth2User.getAttribute("name")); userEntity.setEmail(oAuth2User.getAttribute("email")); userEntity.setRole("ROLE_USER"); // oAuth2User 와 userEntity 로 OAuth2User 구현체 생성 return new DefaultOauth2User(userEntity, oAuth2User.getAttributes()); } }핸들러로 넘어와 토큰을 생성하고 응답 헤더에 추가시켰습니다.JwtProcess나 JwtVO는 선생님 코드랑 똑같이 만들었습니다.@Component public class Oauth2SuccessHandler extends SimpleUrlAuthenticationSuccessHandler { @Override public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException { DefaultOauth2User oAuth2User = (DefaultOauth2User) authentication.getPrincipal(); String jwtToken = JwtProcess.create(oAuth2User); response.addHeader(JwtVO.HEADER, jwtToken); getRedirectStrategy().sendRedirect(request, response, "/"); } }시큐리티 설정파일입니다.cors설정인 configurationSource도 선생님과 같습니다.@Configuration @EnableWebSecurity @RequiredArgsConstructor public class SecurityConfig { private final CustomOauth2UserService userService; private final Oauth2SuccessHandler successHandler; @Bean SecurityFilterChain filterChain(HttpSecurity http) throws Exception{ http.headers().frameOptions().disable(); http.csrf().disable(); http.httpBasic().disable(); http.cors().configurationSource(configurationSource()); http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS); http.authorizeRequests() .antMatchers("/user/**").authenticated() .antMatchers("/admin/**").hasRole("ADMIN") .anyRequest().permitAll() .and() .oauth2Login() .loginPage("/loginForm") .successHandler(successHandler) .userInfoEndpoint().userService(userService); return http.build(); } 구글 로그인 시 /로 리다이렉트는 정상적으로 됩니다.그런데 크롬 개발자 도구를 보면 response 헤더에는 jwt토큰이 있는데요청 헤더에는 jwt토큰이 없습니다... 프론트 쪽은 html 파일들만 생성했는데 혹시 자바스크립트로 뭔가 해줘야 하나요?검색 결과들 참고해서 만들었는데 혹시 oauth2와 jwt를 합치는 방향 자체가 틀렸을까요? 아니면 구글에서 받은 access토큰이 jwt인가요?
-
미해결Java/Spring 테스트를 추가하고 싶은 개발자들의 오답노트
@Valid 어노테이션에 대한 테스트 질문입니다.
안녕하세요. 강의에 매우 깊은 감명을 받고 토이 프로젝트에 말씀해주신 부분들 적용해보고 있습니다.강의에서 가이드 주신대로 유효성 검증에 대한 테스트도 mock 라이브러리 없이 순수 자바 코드로 해보고 있습니다.기존 코드에서는 입력값 유효성 검증을 위해 @Valid 어노테이션을 사용했는데요. 스프링부트를 실행시키지 않으니 @Valid 어노테이션이 정상작동을 안해서 테스트를 작성하는데 어려움을 겪고 있습니다....ㅎㅎ그래서 유효성 검증을 하는 코드를 직접 작성해야 하나 고민하다가 질문을 남기게 되었습니다. 강사님께서는 유효성 검증에 대한 테스트 코드를 작성하는데 어떤 방법을 사용하시는지 궁금합니다.(@Valid는 자바 표준 스펙으로 알고 있어서 스프링을 실행시키지 않아도 방법을 잘 찾아보면 가능할 것 같다 라고도 생각하고 있습니다.)
-
해결됨Practical Testing: 실용적인 테스트 가이드
컨트롤러 테스트의 Mock을 통한 Stubbing 관련 질문
안녕하세요. 우빈님!먼저 우빈님의 테스트 강의가 너무나 재미있어, 테스트에 대한 막연한 지식을 구체화하고 테스트 작성 열망을 크게 키울 수 있어서 감사하다는 말씀을 드리고 싶습니다!다름이 아니라, Controller 테스트를 위해 @WebMvcTest를 통해 Service와 Repository를 Mocking하여 단위 테스트의 형식으로 작성한다는 것을 배웠습니다. 이렇게 배운 것을 사이드 프로젝트에 적용해보며, 의문점이 생겼는데 능력 부족으로 인해 의문이 해결되지 않아 질문을 드리려 합니다. 상황강의에서 작성한 컨트롤러 테스트 중 일부인 OrderControllerTest의 테스트 메서드는 다음과 같습니다.@DisplayName("신규 주문을 등록한다.") @Test void createOrder() throws Exception { // given OrderCreateRequest request = OrderCreateRequest.builder() .productNumbers(List.of("001")) .build(); // when & then mockMvc.perform( post("/api/v1/orders/new") .content(objectMapper.writeValueAsString(request)) .contentType(MediaType.APPLICATION_JSON) ) .andDo(print()) .andExpect(status().isOk()) .andExpect(jsonPath("$.code").value("200")) .andExpect(jsonPath("$.status").value("OK")) .andExpect(jsonPath("$.message").value("OK")); }또한, 해당 메서드의 실행 로그를 보면 MockHttpServletResponse이 다음과 같다는 것을 볼 수 있었습니다.MockHttpServletResponse: Status = 200 Error message = null Headers = [Content-Type:"application/json"] Content type = application/json Body = {"code":200,"status":"OK","message":"OK","data":null} Forwarded URL = null Redirected URL = null Cookies = [] 이후, 저의 사이드 프로젝트의 컨트롤러 테스트를 위와 동일한 방식으로 작성하였지만, 아래와 같이 MockHttpServletResponse의 Body가 빈 채로 응답이 되어 테스트가 실패하게 되는 문제가 발생했습니다.MockHttpServletResponse: Status = 200 Error message = null Headers = [X-Content-Type-Options:"nosniff", X-XSS-Protection:"0", Cache-Control:"no-cache, no-store, max-age=0, must-revalidate", Pragma:"no-cache", Expires:"0", X-Frame-Options:"DENY"] Content type = null Body = Forwarded URL = null Redirected URL = null Cookies = []이때, given()을 통해 Service에 대한 행위를 Stubbing해주니 정상적으로 테스트가 성공하는 것을 확인했습니다. 문제 파악을 위해 조사한 결과 추측되는 차이점은 다음과 같습니다.강사님의 프로젝트에서 Controller의 응답 타입은 커스텀 응답 객체인 ApiResponse를 사용합니다.저의 사이드 프로젝트에서 Controller의 응답 타입은 HttpEntity를 상속하는 ResponseEntity를 사용합니다. 질문Q1. 강사님의 코드를 보면, 아래와 같이 createOrder 메서드에 대한 Stubbing 없이도 정상적으로MockHttpServletResponse의 Body가 응답되어 테스트가 성공합니다.// given ... given(orderService.createOrder(any())) .willReturn(OrderResponse.builder() ... // 생략 .build() ); // 없어도 테스트는 성공한다.저는 given() 절에 @MockBean을 통해 Mock 객체로 설정한 OrderService가 어떤 행위를 해야할지 Stubbing 해주어야 하는 것으로 이해하고 있었는데, 어떻게 Stubbing 없이 Body가 정상적으로 채워져 테스트가 성공한 것인지 궁금합니다. Q2. Q1과 연관하여 강사님의 코드에서는 ApiResponse라는 커스텀한 응답 객체를 컨트롤러 메서드의 응답으로 사용하는데, 제 사이드 프로젝트에서의 응답 타입은 ResponseEntity를 사용하고 있습니다. 이 차이 때문에 발생하는 문제인지 궁금합니다. Q3. 이번 의문점을 통해 컨트롤러 테스트에서 메서드의 행위에 대한 기댓값을 Stubbing하여 검증하는 것이 일종의 답정너(?)와 같은 테스트를 작성하는 것은 아닐까? 라는 생각과 함께, 컨트롤러 테스트 방식에 많은 고민을 해야 하겠다는 다짐을 하게 되었습니다. 이에 대한 우빈님의 생각은 어떠하신지 궁금합니다. 질문이 수준이 다소 떨어지지만, 이 의문점을 해결하고 싶은 마음에 장황하게 나열할 수 밖에 없었음을 양해 부탁드립니다.답변 기다리겠습니다. 감사합니다!
-
해결됨Java/Spring 테스트를 추가하고 싶은 개발자들의 오답노트
테스트 데이터 셋업
안녕하세요 강의 잘 보고 있습니다.다름이 아니라 이렇게 H2등을 쓰지않고 테스트 할 경우, 많은 테스트 데이터들을 셋업하는 것이 힘들것 같은데 보통 어떻게 처리하시나요?h2등을 사용한다고 하면 강의에서 알려주신 것 처럼 보통 .sql을 실행시켜서 사용할텐데,이렇게 소형테스트들에 테스트데이터를 java code로 반복문 돌면서 생성하자니 좀 번거러운 것 같은데 혹시 다른 방법이 있을런지 혹은 어떻게 하시는지 궁금하여 여쭤봅니다.환절기가 다가오는데 더위 조심, 감기 조심 하시길 바랍니다.감사합니다.
-
미해결Practical Testing: 실용적인 테스트 가이드
@NotNull 관련 질문 드립니다.
안녕하세요.먼저, 강의 잘 듣고 있습니다. 강의 따라하던 중 아래 이슈가 발생해서 문의 드립니다. Q1. @NotNull 지정 시,Not-null fields must be initialized라고 경고창이 뜨며.. Q2. 테스트를 진행하면 아래와 같이 메세지 부분에기대했던 값 외에.. 추가 적인 스트링이 들어가서 테스트 성공이 되지 않는 것 같습니다.Body = {"code":400,"status":"BAD_REQUEST","message":"Field error in object 'productCreateRequest' on field 'type': rejected value [null]; codes [NotNull.productCreateRequest.type,NotNull.type,NotNull.sample.cafekiosk.spring.domain.product.ProductType,NotNull]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [productCreateRequest.type,type]; arguments []; default message [type]]; default message [상품 타입은 필수입니다.]","data":null} 그 외에 @NotBlank, @Postivie 도 유사한 에러가 발생하고 있습니다. Expected :상품 가격은 양수여야 합니다.Actual :Field error in object 'productCreateRequest' on field 'price': rejected value [0]; codes [Positive.productCreateRequest.price,Positive.price,Positive.int,Positive]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes ... Q2 의 경우 하여.. 우선은 아래와 같이 문자열을 포함하는지로 수정해서 테스트는 넘어갔습니다..andExpect(jsonPath("$.message", "상품 가격은 양수여야 합니다.").exists()) Q1 내용은 어떻게 수정하면 된느지 궁금합니다. 확인 부탁드립니다~
-
해결됨Java/Spring 테스트를 추가하고 싶은 개발자들의 오답노트
소형 테스트 실행 시 빌드 타임은 어떻게 극복하셨는지요
강의를 굉장히 감명 깊게 보고 Spring 기반으로 되어 있는 레거시 프로젝트에 도메인을 분리하고 유닛 테스트를 넣는 작업을 하고 있습니다. 여기에서 가장 답답한 게 단순한 유닛 테스트임에도 빌드 타임을 그대로 기다려야 한다는 점인데요. 비록 빌드 캐시 덕에 아주 오래 걸리는 건 아니긴 해도 몇십 ms면 끝날 테스트를 몇 초씩 기다려야 하는 점이 많이 답답합니다. 시간 상으로는 인메모리 db를 띄우는 것과 별 차이 없는 것 아닌가? 하는 생각이 들 정도예요. (물론 테스트 코드를 작성하기 쉬운 구조가 좋은 코드 구조라는 명제에는 이견이 없기 때문에 별 차이가 없다 하더라도 계속 진행할 예정입니다.)선생님께서도 담당하시던 시스템에 유닛 테스트를 붙이는 작업을 하셨다고 들었는데 이러한 부분은 어떻게 극복하셨는지 궁금합니다.
-
미해결스프링부트 JUnit 테스트 - 시큐리티를 활용한 Bank 애플리케이션
JPQL 동적쿼리 부분 - > QUERYDSL 마이그레이션 후 질문
querydsl설정은 각종 블로그 보고 설정 적용을 한상태입니다. 일단 엔티티 구조가Transaction 엔티티에서Accout 엔티티를 @MantToOne 다대일 단방향 매핑중이고,입출금 내역 조회부분에서 jpql 부분을 그대로 챗 gpt 에 querydsl 기준 동적쿼리 코드를 돌려보면이런 코드를 알려줍니다 우선 여기서 질문이WithdrawAccount, DepositAccount라는 클래스는 없고 Account를 참조 하는데 QWithdrawAccount, QDepositAccount Q클래스가 필요한 이유를 모르겠습니다.저 코드를 해당 코드와 같이 바꿨습니다 그리고 테스트 코드를 돌려보면 transaction.withdrawAccount is not a root path 라는 에러가 나는데root path 관련 질문글 찾아보면" 이를 해결하려면 from 절에서 해당 객체를 다시 선언해주면 됩니다. 즉, querydsl에서는 join을 할 때 alias를 줘서 해당 객체를 다시 선언해주는 방식으로 작성해야 해결할 수 있습니다. "이런 답변이있는데변경 된 코드에서 innerjoin의 오른쪽 파라미터에 별칭을 잘못 줘서 에러가 나는거 같긴 한데QTransaction.transaction.withdrawaccount 와 같은 별칭을 부여하면 안되는 걸까요,,?
-
미해결스프링부트 JUnit 테스트 - 시큐리티를 활용한 Bank 애플리케이션
username으로 select를 왜하는지 잘모르겠습니다...
하이버네이트가 로그인한 user의 username으로 조회하는 쿼리를 발생시키는데 어떤 이유로 이게 발생되는지 잘모르겠습니다,,,!!! 컨트롤러 들어가기 전부터 조회가 되던데 어떠한 이유로 쿼리가 발생하는지 너무 궁금해서 질문글을 작성하게 되었습니다 ㅠㅠㅠ!!!
-
해결됨Java/Spring 주니어 개발자를 위한 오답노트
MySQL 사용에 대한 조언 질문있습니다.
안녕하세요주니어 개발자 길라잡이가 되주셔서 감사합니다. fulltext index에 대해서 질문이 있습니다.임계점이 올경우 튜닝으로도 해결할 수 없는 문제라고 말씀해주셨는데요경험담이라고 해주셨는데 그 경험담을 듣고 싶어서 질문을 남겨봅니다.공식 문서에서 찾아보니까 https://dev.mysql.com/doc/refman/8.0/en/innodb-fulltext-index.html#innodb-fulltext-index-deletion동시 경합이 발생할 수 있다고 작성이 되어있는데이 문제로 발생한건가요 ?아니면 다른 인덱스와 다르게 인덱스 용량 때문에 발생한 문제이신건가요 ? FULLTEXT INDEX의 한계 검색을 해도 다 좋은점만 나오더라구요..
-
미해결따라하며 배우는 리액트 테스트 [2023.11 업데이트]
강의 관련 내용 github 업로드 질문
안녕하세요 이번에 '따라하며 배우는 React Testing' 강의를 수강중인 박동준이라고 합니다. 이번 강의에서 여행상품 앱 만들기 파트에서 진행하는 방법들을 정리하여 개인 포트폴리오로서 활용하고 싶습니다.모든 소스코드를 올리는것이 아니라, 방법적인 부분들을 정리하고 회원가입 또는 게시글 작성 및 댓글 등 간단한 CRUD 로직으로 배운 개념을 적용하여 코드 및 방법들에 대해서 올리고자 합니다.혹시 이런 방법으로 제 개인 github에 업로드 해도 되는지 궁금합니다!
-
미해결Practical Testing: 실용적인 테스트 가이드
궁금한게 있습니다.
언제 @MockBean 쓰고@Mock + @InjectMocks 을 이용하나요?? @MockBean은 자동으로 DI해주니 @MockBean 쓰는게 낫지 않나요?? 제가 설명해주신걸 놓친거 같은데..다시한번 설명 부탁드리겠습니다.미리 감사드릴게요.
-
미해결따라하며 배우는 리액트 테스트 [2023.11 업데이트]
이미지가 안보인다 하셔서 다시 질문드립니다.
안녕하세요 선생님!말씀 주신대로 7-6강 보고 왔지만... 혼자서는 문제의 원인 파악이 힘들어서 다시 재질문 드립니다 ㅠㅠ로그를 확인해 보니 calculate.test.js에서 Fail이 발생되고 있지만, 원인 파악은 아직 못한 상태입니다 ㅠㅠ 레포지토리 주소도 같이 올려드립니다! PASS src/pages/OrderPage/tests/Type.test.js (7.469 s) FAIL src/pages/OrderPage/tests/Calculate.test.js (7.513 s) ● Console console.error Warning: An update to Type inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://reactjs.org/link/wrap-tests-with-act at fn (D:\www\react-shop-test\src\pages\OrderPage\Type.js:8:17) 17 | try { 18 | const response = await axios.get(`http://localhost:5000/${orderType}`); > 19 | setItems(response.data); | ^ 20 | } catch (err) { 21 | setError(true); 22 | } at printWarning (node_modules/react-dom/cjs/react-dom.development.js:86:30) at error (node_modules/react-dom/cjs/react-dom.development.js:60:7) at warnIfUpdatesNotWrappedWithActDEV (node_modules/react-dom/cjs/react-dom.development.js:27589:9) at scheduleUpdateOnFiber (node_modules/react-dom/cjs/react-dom.development.js:25508:5) at setItems (node_modules/react-dom/cjs/react-dom.development.js:17527:7) at loadItems (src/pages/OrderPage/Type.js:19:7) ● update product's total when products change expect(element).toHaveTextContent() Expected element to have text content: 0 Received: 총 가격: 6 | 7 | const productsTotal = screen.getByText("총 가격:", { exact: false }); > 8 | expect(productsTotal).toHaveTextContent("0"); | ^ 9 | 10 | // const americaInput = await screen.findByRole("spinbutton", { 11 | // name: "America", at Object.<anonymous> (src/pages/OrderPage/tests/Calculate.test.js:8:25) PASS src/App.test.js (7.781 s) ● Console console.error Warning: An update to Type inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://reactjs.org/link/wrap-tests-with-act at fn (D:\www\react-shop-test\src\pages\OrderPage\Type.js:8:17) at div at div at OrderPage at div at App 17 | try { 18 | const response = await axios.get(`http://localhost:5000/${orderType}`); > 19 | setItems(response.data); | ^ 20 | } catch (err) { 21 | setError(true); 22 | } at printWarning (node_modules/react-dom/cjs/react-dom.development.js:86:30) at error (node_modules/react-dom/cjs/react-dom.development.js:60:7) at warnIfUpdatesNotWrappedWithActDEV (node_modules/react-dom/cjs/react-dom.development.js:27589:9) at scheduleUpdateOnFiber (node_modules/react-dom/cjs/react-dom.development.js:25508:5) at setItems (node_modules/react-dom/cjs/react-dom.development.js:17527:7) at loadItems (src/pages/OrderPage/Type.js:19:7) console.error Warning: An update to Type inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://reactjs.org/link/wrap-tests-with-act at fn (D:\www\react-shop-test\src\pages\OrderPage\Type.js:8:17) at div at div at div at OrderPage at div at App 17 | try { 18 | const response = await axios.get(`http://localhost:5000/${orderType}`); > 19 | setItems(response.data); | ^ 20 | } catch (err) { 21 | setError(true); 22 | } at printWarning (node_modules/react-dom/cjs/react-dom.development.js:86:30) at error (node_modules/react-dom/cjs/react-dom.development.js:60:7) at warnIfUpdatesNotWrappedWithActDEV (node_modules/react-dom/cjs/react-dom.development.js:27589:9) at scheduleUpdateOnFiber (node_modules/react-dom/cjs/react-dom.development.js:25508:5) at setItems (node_modules/react-dom/cjs/react-dom.development.js:17527:7) at loadItems (src/pages/OrderPage/Type.js:19:7) Test Suites: 1 failed, 2 passed, 3 total Tests: 1 failed, 4 passed, 5 total Snapshots: 0 total Time: 13.137 s Ran all test suites related to changed files.👇 기존 질문https://www.inflearn.com/questions/985742
-
미해결Practical Testing: 실용적인 테스트 가이드
강의 내용 블로그 포스팅 문의 드립니다.
안녕하세요 강사님, 다름이 아니라 강의 내용을 블로그(벨로그) 글로 정리해서 기록해도 될까 여쭤봅니다. 코드, 내용을 사용하고 싶은데 허락해주실까요? ㅠ 출처글을 항상 남기겠습니다.
-
미해결Practical Testing: 실용적인 테스트 가이드
공통관심사 테스트 가이드
안녕하세요. 우빈님질문이 있습니다! AOP, Interceptor... 와 같은 공통 관심사를 테스트할 때는 보통 어떤 전략을 갖고 테스트 코드를 작성하나요?예를 들어 아래와 같은 요구사항이 있다고 가정합니다.22시 이후에는 모든 요청에 대해서 예외를 발생시킨다. 저라면 모든 Controller에 check22hours()라는 로직을 AOP를 사용하여 적용할 것 같은데요.이때 순수하게 check22hours()라는 단위 테스트만 작성하면 되는 것 일까요? 아니면 AOP 자체가 의도한대로 동작하는지 테스트 코드를 작성하는 것이 바람직한 것 인가요? 감사합니다.
-
미해결스프링부트 JUnit 테스트 - 시큐리티를 활용한 Bank 애플리케이션
로그아웃은 Redis를 사용해야하는 건가요?
로그인시 Redis에도 정보를 담아서 로그아웃시에 제거 하는 방식으로 가야 하려나요?
-
미해결Practical Testing: 실용적인 테스트 가이드
테스트 환경 통합 질문
안녕하세요. 테스트 환경 통합 강의를 보다가 궁금한 사항이 있어서 질문드립니다. 강의 내용처럼 통합 테스트를 수행할 때 여러번 Spring 서버를 띄우는 것을 효과적으로 개선하기 위해 TestSupport 추상클래스를 상속받아 Repository/Service 계층 테스트시에 통합된 환경을 구축하는게 더 좋은 것은 이해했는데요.Controller 테스트의 경우, 강의 내용처럼 따로 스프링을 띄우지 않고 @WebMvcTest로만 테스트코드를 작성하는 경우라면 공통 추상 클래스를 구현하는게 비효율적일수도 있을 것 같아서 궁금증이 생겼습니다.@WebMvcTest(Controllers="Controller.class") 형식으로 컨트롤러 클래스들을 명시해 줘야 하는데, 클래스가 수십개로 많아질수록 매번 추가해야 하고, Controllers에 많은 클래스를 넣어야 하고(패키지 단위로 지정한다든가 등의 방식은 없는것 같더라구요), 각 클래스에서 사용하는 MockBean이 많아질수록 필드가 많아져서 본문이 길어 보기 힘들수도 있을 것 같아서요. @SpringBootTest처럼 서버를 띄우는 비용이 발생하지 않으므로, 각각의 컨트롤러 테스트마다 명시적으로 @WebMvcTest를 사용하고, 해당 클래스에서 사용할 Mockbean 또한 명시적으로 지정하는 방식도 괜찮을까요? 실무적인 관점으로 볼 때, 제 생각대로 Controller 클래스의 테스트는 통합하지 않고 각각 구현하는 건 어떨지 궁금합니다.
-
미해결Practical Testing: 실용적인 테스트 가이드
TDD 질문입니다.!!
우빈님 커뮤니티나 유튜브에서 잘보고 있습니다.ㅎㅎTDD관련해서 질문이있는데, 프로덕션 코드 이전에 테스트 케이스를 먼저 작성할때 성공/실패 케이스에 대해서 미리 작성하고 "리팩토링"단계에서 앞서 작성한 케이스를 성공하도록 프로덕션 코드를 구현하는 순으로 하나요?아니면, 성공 케이스만 작성하고 리팩토링 단계에서 프로덕션 코드를 구현하고, 이후 실패 케이스를 작성하고 프로덕션 코드를 수정하는 순으로 하나요?!
-
해결됨따라하며 배우는 리액트 A-Z[19버전 반영]
react-netflix-clone 작성 후 github에 배포 후 브라우저 접속 시 콘솔 에러입니다.
https://metlin-72.github.io/react-netflix/ 접속 시 아래와 같이 에러가 납니다.===========================================================metlin-72.github.io/:1 GET https://metlin-72.github.io/static/js/main.5bcb49d4.js net::ERR_ABORTED 404metlin-72.github.io/:1 GET https://metlin-72.github.io/static/css/main.10fc3cf1.css net::ERR_ABORTED 404manifest.json:1 GET https://metlin-72.github.io/manifest.json 404manifest.json:1 Manifest: Line: 1, column: 1, Syntax error.===========================================================뭘까요? 여러번 반복해서 똑같이 따라했는데 안되네요.도움 부탁드립니다.
-
미해결Practical Testing: 실용적인 테스트 가이드
강사님께서 사용하고 계신 개발 환경이 궁금합니다.
IDE를 보니 유용한 플러그인들이 보이는 것 같아요.궁금합니다...!
-
미해결Java/Spring 테스트를 추가하고 싶은 개발자들의 오답노트
혹시 다음 강의는 어떤 내용으로 준비중이신지 궁금합니다
혹시 다음 강의는 어떤 내용으로 준비중이신지 궁금합니다