묻고 답해요
129만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결
@DataJpaTest에서 참조하는 Entity 관련 질문 있습니다
개발자 선배님들 안녕하세요. @DataJpaTest 관련해서 궁금한점이 생겨서 질문드립니다. 제가 작성한 User Entity에서 Address Entity를 FK로 참조하고 있습니다. 여기서 UserRepository의 테스트 코드를 작성할 때 AddressRepository도 @Autowired로 등록 후 Address를 먼저 save()로 insert 후에 User Insert 테스트를 작성해야 하나요??? 이러면 UserRepository의 테스트가 아니라 UserRepository, AddressRepository 두개의 테스트를 작성하는 것이라 좀 이상하다고 생각이 드네요.. 제가 작성한 코드입니다. package com.kh.bookfinder.repository; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; import com.kh.bookfinder.entity.Address; import com.kh.bookfinder.entity.User; import com.kh.bookfinder.entity.UserStatus; import jakarta.persistence.EntityManager; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase; import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase.Replace; import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; import org.springframework.dao.DataIntegrityViolationException; import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.TestPropertySource; @ActiveProfiles("test") @DataJpaTest @TestPropertySource(locations = "classpath:application-test.properties") @AutoConfigureTestDatabase(replace = Replace.NONE) public class UserRepositoryTest { @Autowired UserRepository userRepository; @Autowired AddressRepository addressRepository; Address givenAddress; @BeforeEach public void setup() { givenAddress = Address.builder() .si("서울특별시") .gu("강남구") .dong("역삼동") .roadFullAddress("역삼역") .build(); addressRepository.save(givenAddress); } @Test public void userInsertTest1() { // Given: User가 주어진다. User givenUser = User.builder() .email("user@mail.kr") .password("password") .phone("010-1234-5678") .nickname("nickname") .status(UserStatus.ADMIN) .address(givenAddress) .build(); // When: save() 메서드를 호출하여 User를 저장한다. User actual = this.userRepository.save(givenUser); // Then: actual은 givenUser와 같다. assertThat(actual).isNotNull(); assertThat(actual).isEqualTo(givenUser); } @Test @DisplayName("email은 unique로 중복이 불가능하다") public void userInsertTest2() { // Given: email이 같은 User가 2개 주어진다. User givenUser1 = User.builder() .email("user@mail.kr") .password("password") .phone("010-1234-5678") .nickname("nickname") .status(UserStatus.ADMIN) .address(givenAddress) .build(); User givenUser2 = User.builder() .email("user@mail.kr") .password("password2") .phone("010-5678-1234") .nickname("nickname2") .status(UserStatus.ADMIN) .address(givenAddress) .build(); // When: save() 메서드를 호출하여 givenUser1를 저장한다. User actual = this.userRepository.save(givenUser1); // And: save() 메서드를 호출하여 givenUser2를 저장한다. // Then: Exception이 발생한다. assertThatThrownBy(() -> this.userRepository.save(givenUser2)) .isInstanceOf(DataIntegrityViolationException.class) .hasMessageContaining("Duplicate"); } @Test @DisplayName("nickname은 unique로 중복이 불가능하다") public void userInsertTest3() { // Given: email이 같은 User가 2개 주어진다. User givenUser1 = User.builder() .email("user@mail.kr") .password("password") .phone("010-1234-5678") .nickname("nickname") .status(UserStatus.ADMIN) .address(givenAddress) .build(); User givenUser2 = User.builder() .email("user2@mail.kr") .password("password2") .phone("010-5678-1234") .nickname("nickname") .status(UserStatus.ADMIN) .address(givenAddress) .build(); // When: save() 메서드를 호출하여 givenUser1를 저장한다. User actual = this.userRepository.save(givenUser1); // And: save() 메서드를 호출하여 givenUser2를 저장한다. // Then: Exception이 발생한다. assertThatThrownBy(() -> this.userRepository.save(givenUser2)) .isInstanceOf(DataIntegrityViolationException.class) .hasMessageContaining("Duplicate"); } } 읽어주셔서 감사합니다..!
-
미해결습관부터 바꿔주는 Node.js & Express 기초
Axios Mocking에 관한 질문입니다.
// Axios.test.ts import axios from 'axios'; import ManagerService from "./ManagerService"; jest.mock('axios'); const mockedAxios = axios as jest.Mocked<typeof axios>; describe("Axios Test", () => { let managerService = new ManagerService(); it("should mock axios get call", async () => { mockedAxios.get.mockResolvedValue({ data: [ { corporation: "inflearn" } ], }); const test = await managerService.axiosTest("inflearn"); expect(test).toEqual([ { corporation: "inflearn" } ]); expect(mockedAxios.get).toHaveBeenCalledWith(`${process.env.SERVER_URL}/corporation/info`, { params: { corporation: "inflearn" }, }); }); }); 위와 똑같은 코드로 테스트를 진행했고, 본 코드에서는 약간의 차이만 있었습니다.하지만 아직 왜 그렇게 되는지 알지 못하여서 강사님께 여쭤보려고 합니다. 1번 코드 ( 테스트가 잘 동작하는 코드 )axiosTest = async (corporation: string) => { const response = await axios.get(`${process.env.SERVER_URL}/corporation/info`, { params: { corporation: corporation, }, }); if (!response) { throw new Error("값이 없음"); } return response.data; }; 2번 코드 ( 값이 없음으로 에러가 발생하는 코드 )axiosTest = async (corporation : string) => { const site = await axios({ method: 'get', url: `${process.env.SERVER_URL}/corporation/info`, params: { corporation : corporation }, }) if(!site) { throw new Error("값이 없음"); } return site.data } 둘의 차이점에 대해서 알 수 있을까요?
-
미해결습관부터 바꿔주는 Node.js & Express 기초
Express 사용하면서 Jest 테스트 관련해서 질문 드립니다.
// Axios.test.ts import axios from 'axios'; import ManagerService from "./ManagerService"; jest.mock('axios'); const mockedAxios = axios as jest.Mocked<typeof axios>; describe("Axios Test", () => { let managerService = new ManagerService(); it("should mock axios get call", async () => { mockedAxios.get.mockResolvedValue({ data: [ { corporation: "inflearn" } ], }); const test = await managerService.axiosTest("inflearn"); expect(test).toEqual([ { corporation: "inflearn" } ]); expect(mockedAxios.get).toHaveBeenCalledWith(`${process.env.SERVER_URL}/corporation/info`, { params: { corporation: "inflearn" }, }); }); }); 위와 똑같은 코드로 테스트를 진행했고, 본 코드에서는 약간의 차이만 있었습니다.하지만 아직 왜 그렇게 되는지 알지 못하여서 강사님께 여쭤보려고 합니다.1번 코드 ( 테스트가 잘 동작하는 코드 )axiosTest = async (corporation: string) => { const response = await axios.get(`${process.env.SERVER_URL}/corporation/info`, { params: { corporation: corporation, }, }); if (!response) { throw new Error("값이 없음"); } return response.data; }; 2번 코드 ( 값이 없음으로 에러가 발생하는 코드 )axiosTest = async (corporation : string) => { const site = await axios({ method: 'get', url: `${process.env.SERVER_URL}/corporation/info`, params: { corporation : corporation }, }) if(!site) { throw new Error("값이 없음"); } return site.data } 둘의 차이점에 대해서 알 수 있을까요?
-
미해결
test
test
-
해결됨스프링 핵심 원리 - 기본편
Invalid test class 'hello.core.member.MemberServiceTest': 오류 질문
org.junit.runners.model.InvalidTestClassError: Invalid test class 'hello.core.member.MemberServiceTest': 1. Method join() should be public 영한님 코드랑 동일한데 해당 에러가 발생합니다.에러 메시지처럼 join() 에 public 을 붙여 줬더니 해결이 되었는데, 이유가 뭘까요?
-
미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
Controller Test 시 Repository 사용 관련 질문입니다.
안녕하세요 호돌맨님 !! 강의 하면서 항상 궁금했던 점인데, 저는 Controller Test 를 End-To-End Test 용도로 자주 활용하고 있는데요, 이러면 Repository Method 를 Controller Test 에서 직접적으로 사용하는 것보다 Service 단 로직을 거쳐 Repository 의 Method 가 호출되도록 하는게 맞는걸까요 ? 호돌맨님은 항상 Controller Test 로직 짜실 때 Repository 의 save() 와 같은 메서드를 한번에 호출해서 사용하는 걸보고 질문 드립니다 !
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
테스트케이스 9:32 @Test
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)음..아니요[질문 내용]여기에 질문 내용을 남겨주세요.강의 9:32부분에서 에러가 나야되는데 spring2로 member1 이니까요,근데 저는 spring1도 초록불 save고spring2에서도 초록불이고심지어 spring21이여도 초록불이에요그 전까지는 강의 대로 결과가 나왔는데이건 아무리 바꿔도 결과가 강의랑 다르네요...어떻게 해야 에러가 뜰까요?????????????????save가 되면 안되는거잖아요....? MemoryMemberRepositoryTest 코드도 복붙해여주석은 신경쓰지말고 봐주세여; 한곳 이해못한것있는데 제가 설명을 못알아들어서요 확인되시면 설명도 추가적으로 부탁드릴래요package hello.hellospring.repository;import hello.hellospring.domain.Member;import org.assertj.core.api.Assertions;import org.junit.jupiter.api.Test;import static org.assertj.core.api.Assertions.*;class MemoryMemberRepositoryTest {MemberRepository repository = new MemoryMemberRepository();@Testpublic void save() {Member member = new Member();member.setName("spring");repository.save(member);Member result = repository.findById(member.getId()).get(); //get:바로꺼내는게좋지는않지만테스트니ok//System.out.println("result = " + (result == member)); //이렇게 가져올수없으니assertThat(member).isEqualTo(result); //option + enter}@Testpublic void findByName() {Member member1 = new Member();member1.setName("spring1");repository.save(member1);Member member2 = new Member(); //shift + F6 중복이름 고칠때 같이 고쳐짐member2.setName("spring2");repository.save(member2);Member result = repository.findByName("spring1").get(); //한번까서?보낸다고요??이해못했음 <= 아, 이부분도 설명해주시면 좋을것같아용 히히assertThat(result).isEqualTo(member1);}}
-
미해결탄탄한 백엔드 NestJS, 기초부터 심화까지
테스트 코드 관련하여 질문
안녕하세요.nestjs boilerplate강의 관련해서 마지막에 users.service.spec.ts의 테스트 코드들에 대하여 설명을 해주신다고 하였는데 제가 찾지 못한건지 아니면 추후에 강의가 올라오는지 궁금합니다.
-
미해결
junit.jupiter의 Assertions 질문
Assertions를 입력했을때 웬 이상한 AssertionsKt가 뜹니다.왜이러는거죠?
-
해결됨토비의 스프링 부트 - 이해와 원리
안녕 하세요~~
강의 내용과 관련 없는 내용이기는 한데...너무 궁금한게 있어서요~~토비님은 스프링으로 실무를 하실 때 테스트를 어떻게 하시나요?컨트롤러, 서비스, 도메인 그외 등등 있을 때각자 다 테스트를 하시는지...고전파로 하시는지 런던파로 하시는지...좀 궁금합니다~~ 감사합니다
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
우선 해야하는 테스트 방식이 궁금합니다.
안녕하세요 :)평소 영한님 강의를 통해 많은 가르침을 받고 있는 주니어 개발자입니다.만약 별도 Test DB 없이 Service 계층 테스트를 한다면,크게 다음과 같은 세가지 테스트 방식이 있는 것으로 이해하였습니다!Service 테스트에 @Transactional 추가하여, 테스트 수행 후 롤백실제 DB에 수행하므로, insert시 유니크한 컬럼에 대해 이미 동일 데이터가 존재한다면 테스트 실패Repository 의존성을 Mock 처리Mock을 통해 행위를 검증하게되므로 보다 깨지기 쉬운 테스트가됨임베디드 DB에 테스트 수행임베디드 DB와 운영환경 DB의 차이점이 있을 수 있음 세가지 방식 모두 각자의 트레이드오프가 있을 것 같은데요.권장되는 방식이나, 주로 사용하시는 테스트 방식이 궁금합니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
MemberServiceIntegrationTest 오류 질문드립니다.
antlr.NoViableAltException: unexpected token:generatedAlias0org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: generatedAlias0 near line 1, column 8 [select generatedAlias0 from...] 이 부분에서 계속 에러가 뜨는데 이유를 모르겠어서 질문드려요!참고로 이와 비슷한 문의 글도 인프런과 stackoverflow에서 봤지만, 마땅한 오타가 없어서 여기에 글 올립니다! // MemberServiceIntegrationTest import org.assertj.core.api.Assertions; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.annotation.Commit; import org.springframework.transaction.annotation.Transactional; import with.younghan.kim.domain.Member; import with.younghan.kim.repository.MemberRepository; import static org.assertj.core.api.AssertionsForClassTypes.assertThat; import static org.junit.jupiter.api.Assertions.assertThrows; @SpringBootTest @Transactional class MemberServiceIntegrationTest { @Autowired MemberService memberService; @Autowired MemberRepository memberRepository; @Test void 회원가입() { //given Member member = new Member(); member.setName("spring100"); //when Long saveId = memberService.join(member); //then Member findMember = memberService.findOne(saveId).get(); assertThat(member.getName()).isEqualTo(findMember.getName()); } @Test public void 중복_회원_예외() { //given Member member1 = new Member(); member1.setName("spring"); Member member2 = new Member(); member2.setName("spring"); //when memberService.join(member1); IllegalStateException e = assertThrows(IllegalStateException.class, () -> memberService.join(member2)); assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다."); } } // MemberService import org.springframework.transaction.annotation.Transactional; import with.younghan.kim.domain.Member; import with.younghan.kim.repository.MemberRepository; import java.util.List; import java.util.Optional; @Transactional public class MemberService { private final MemberRepository memberRepository; public MemberService(MemberRepository memberRepository) { this.memberRepository = memberRepository; } /** * 회원 가입 */ public Long join(Member member) { validateDuplicateMember(member); //중복 회원 검증 memberRepository.save(member); return member.getId(); } private void validateDuplicateMember(Member member) { memberRepository.findByName(member.getName()) .ifPresent(m -> { throw new IllegalStateException("이미 존재하는 회원입니다."); }); } /** * 전체 회원 조회 */ public List<Member> findMembers() { return memberRepository.findAll(); } public Optional<Member> findOne(Long memberId) { return memberRepository.findById(memberId); } } // JpaMemberRepository import with.younghan.kim.domain.Member; import javax.persistence.EntityManager; import java.util.List; import java.util.Optional; public class JpaMemberRepository implements MemberRepository { private final EntityManager em; public JpaMemberRepository(EntityManager em) { this.em = em; } @Override public Member save(Member member) { em.persist(member); return member; } @Override public Optional<Member> findById(Long id) { Member member = em.find(Member.class, id); return Optional.ofNullable(member); } @Override public Optional<Member> findByName(String name) { List<Member> result = em.createQuery("select m from Member m where m.name = :name", Member.class) .setParameter("name", name) .getResultList(); return result.stream().findAny(); } @Override public List<Member> findAll() { return em.createQuery("select m from Member m", Member.class) .getResultList(); } } // Member import javax.persistence.*; @Entity public class Member { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
test부분에서 Junit
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/)[질문 내용] 저는 이클립스에서 코딩중인데요Junit 테스트 부분에 질문이 있습니다.JUnit 결과창에 Error는 없고 Failures만 하나뜹니다이것은 에러는 아니니 무시하고 넘어가도 되는 부분인가요?아니면 Failures에도 0이라고 하나도 안떠야 정상인가요 ???? 두번째 사진은 중복이 없을 경우 테스트 결과입니다.!
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
실무에서 Test Code 작성할 때 database에 접근하는 것에 대한 질문
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]Test code 에서 Member 로컬 변수로 초기화해서 repository에 저장한 후 assertThat 메서드를 활용하여 test 진행하는 것에 대해서 학습하였습니다.수업처럼 간단한 하드코딩이 아닌 실무 test 코드를 작성할 때는 이미 저장된 database에 접근하여 member를 받아온 후 이를 test code를 돌려보는 것이 더 정확하게 test를 할 수 있지 않을까요? test code 에서는 database에 접근하여 test를 하는 것이 아닌가요?
-
미해결탄탄한 백엔드 NestJS, 기초부터 심화까지
npm run test:e2e
수강생분들의 질문을 기다립니다! - 에러에 해당하는 질문은 "에러가 발생한 상황에 대한 충분한 설명", "에러 메세지", "에러가 난 코드 스크린샷"을 함께 첨부해주세요. - 언어에 해당하는 질문은 구글링 및 서치 후에 구체적으로 질문해주시면 좋습니다. - 간단한 진로 및 방향성에 대한 질문은 메일로 보내주세요.- 패키지 버전 관리은 실무 환경과 트랜드에 맞추어 강의를 업데이트 하고 있습니다. 강의를 그대로 따라갔는데 에러가 발생한다면 패키지 버전을 강의에서 사용하는 버전과 동일하게 맞춰주세요!- 강의 노트, QA 목록, 공지 사항을 먼저 확인해주세요.- 논리적이고 구체적인 질문은 학습 효과를 올립니다 :) 강의를 보시다가 혹시나 npm run test:e2e 를 돌려봤는데 npm ERR! code ELIFECYCLEnpm ERR! errno 1npm ERR! amamov.com@1.8.0 test:e2e: jest --config ./test/jest-e2e.jsonnpm ERR! Exit status 1npm ERR! npm ERR! Failed at the amamov.com@1.8.0 test:e2e script.npm ERR! This is probably not a problem with npm. There is likely additional logging output above.npm ERR! A complete log of this run can be found in:npm ERR! /Users/anhyeongjun/.npm/_logs/2022-10-13T13_02_17_408Z-debug.log이런 error를 맞이하신다면 { "moduleFileExtensions": ["js", "json", "ts"], "rootDir": ".", "testEnvironment": "node", "testRegex": ".e2e-spec.ts$", "transform": { "^.+\\.(t|j)s$": "ts-jest" }, "moduleNameMapper": { "^src/(.*)$": "<rootDir>/../src/$1" } } moduleNameMapper이부분이 들어가있는지 확인하신 후 없으면 넣어주면 test가 성공적으로 진행될 수 있습니다. 다만 윤상석 선생님 추가해서 test를 돌려보면 Jest did not exit one second after the test run has completed.This usually means that there are asynchronous operations that weren't stopped in your tests. Consider running Jest with --detectOpenHandles to troubleshoot this issue. 이런 오류가 나는데 이유가 무엇일까요?
-
해결됨호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
전체 테스트시 id 값 증가로 인한 실패
안녕하세요.단위테스트 할 때는 문제가 없으나 전체 테스트 할 때 PostControllerTest의 "글 여러개 조회" 테스트 와, "페이지를 0으로 요청하면 첫 페이지를 가져온다." 테스트 에서 에러가 납니다.Spring Rest Docs 생성에도 지장이 있어, 현재는 임시방편으로//.andExpect(jsonPath("$[0].id").value(30))둘 다 이 id 체크를 주석처리해놓고 진행하고 있습니다.구글링해서 찾아보니@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD)이 방식으로 컨텍스트를 매번 재생성 하는 방법도 있다곤 하지만 이렇게 해도 에러가 나고, 성능이 안좋아진다고 합니다. 이런 문제는 보통 어떤식으로 해결하는지 궁금합니다! 추가로 호돌맨님은 강의에서 따로 이 부분이 걸리진 않던데 이유도 궁금하네요,,,
-
미해결[개념은 호옹~, 실습 빡] 스프링 부트, 입문!
22강 질문입니다..
22강 테스트 코드에서 계속 에러가 납니다.. 그래서 강사님 코드를 복붙했는데도 계속 에러가 납니다.. 1. 특정 게스트의 모든 댓글 조회 org.opentest4j.AssertionFailedError: 4번 글의 모든 댓글을 출력! ==> Expected :[Comment(id=1, article=Article(id=4, title=당신의 인생영화는?, content=댓글 ㄱ), nickname=park, body=굿윌헌팅), Comment(id=2, article=Article(id=4, title=당신의 인생영화는?, content=댓글 ㄱ), nickname=Kim, body=헌트), Comment(id=3, article=Article(id=4, title=당신의 인생영화는?, content=댓글 ㄱ), nickname=lee, body=아임샘)] Actual :[Comment(id=1, article=Article(id=4, title=당신의 인생영화는?, content=댓글 ㄱ), nickname=park, body=굿윌헌팅), Comment(id=2, article=Article(id=4, title=당신의 인생영화는?, content=댓글 ㄱ), nickname=kim, body=헌트), Comment(id=3, article=Article(id=4, title=당신의 인생영화는?, content=댓글 ㄱ), nickname=lee, body=아임샘)] <Click to see difference> 2. 특정 닉네임 조회시 org.springframework.dao.InvalidDataAccessApiUsageException: Could not locate ordinal parameter [1], expecting one of []; nested exception is java.lang.IllegalArgumentException: Could not locate ordinal parameter [1], expecting one of [] 이런 에러가 납니다.. 원인이 몰까요???? 제가 몰 잘못했을까요??? orm도 복붙해봤는데도 계속 에러가 납니다... 답변 해주시면 감사하겠습니다..
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
스프링 데이터 jpa 강의 관련 질문입니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용] 스프링 데이터 jpa 강의를 따라 코딩 중에, SpringDataJpaMemberRepository 인터페이스를 생성 후에 회원가입 테스트를 실행하였는데 자꾸 이런 에러가 뜹니다. 구글링 하면서 비슷한 사람들을 찾아 수정을 해봤는데 아직 오류를 못찾겠어서 질문 드립니다ㅜㅜ
-
미해결
[스프링 부트 테스트 질문] 스프링 어플리케이션 컴포넌트에 대한 테스트 방법 ( mock 을 안쓰는게 맞나요? )
질문 상황 1) 스프링 어플리케이션에 대한 테스트를 진행할 때, @SpringBootTest 를 적용함 2) 이 경우 테스트 코드 실행 시, 스프링 실행 환경에 필요한 객체들을 생성 3) 스프링 컴포넌트로 선언할 경우 객체 생성에 필요한 코드가 준비되어 있지 않은 경우, 스프링 부트가 실행되는 과정에서 에러가 발생-> 강의의 예시에선 StudyService 에 @Service 어노테이션을 붙이는 경우, private final MemberService memberService 를 불러오는 과정에서 에러가 발생.( Error creating bean with name 'studyService' defined in file ..... No qualifying bean of type 'app.member.MemberService' available) ------------------------------------------------------------------------------------------ 질문 : 스프링 부트 컴포넌트에 대한 mockito 사용방법 구체적인 질문 1) 위의 상황을 제가 잘 이해한게 맞나요 ? 2) 스프링 컴포넌트에 대한 테스트 방법을 대략적으로 알려주세요 ex 1) 일반적으로 객체 생성에 필요한 모든 클래스의 구현부가 나오기 전까지 테스트 하지 않는다. 따라서 mockito 사용에 대해 고민할 필요가 없다.ex 2) @Component , @service 어노테이션떼고 하고 싶은 테스트만 먼저 진행 하라3) 선생님 강의 중에 스프링 어플리케이션에 대한 전반적인 작업 과정을 관찰하고 싶으면 "백기선 - 스프링 기반 rest api 개발" 을 보면 될까요 ? 제가 아직 테스트 강의를 끝까지 안봐서 놓치고 있는 설명이 있을수도 있습니다. 유튜브 잘 보고 있어요. 구독잡니다수고하세요 :)
-
미해결스프링 핵심 원리 - 기본편
다시 복습하면서 테스트 코드 작성하는데 궁금한게 생겼습니다.
할인율을 적용하여 return 하는 과정에서 평소 습관대로 연산 과정에 따라 괄호 처리를 하였는데 원하는 값이 나오지 않아서 질문 남기게 되었습니다. 괄호가 없는 사진(아래) -원하는 테스트 결과 나옴 괄호가 있는 사진(아래) -원하는 테스트 결과 나오지 않음 테스트 코드도 첨부합니다. 처음 겪는 에러라서 스스로 찾아보는데 한계를 느껴 질문 남기게 되었습니다. 리턴시 괄호에 연산에 대한 특이 조건이 성립되는 것 인가요??