MemberServiceTest 질문 있습니다.
239
작성한 질문수 28
안녕하세요.
JUnit을 통해 MemberServiceTest 작성할때
질문있습니다.
강의에서는 이와 같이 @BeforeEach를 사용해
test 전에 AppConfig 인스턴스를 생성하고 메소드를
활용해 memberService 객체를 만들어줍니다.
하지만 TestCode가 아닌 main method가 있는
클래스에서 테스트 할때는 그냥 AppConfig를 객체로
생성해서 사용하죠.
여기서 궁금증 있습니다.
왜 TestCode에서
이렇게 쓰면 안되는 것이고, 오류가 나는 것인지 궁금합니다.
추가적으로 BeforeEach에 대해 개발자님께서 테스트
실행전에 무조건 실행하는 것이라고 말씀해주셨습니다.
그렇다면 MemberService memberSevice; 라는
코드는 BeforeEach 밖에 존재하기 때문에 이상합니다.
왜냐하면 테스트 전에 AfterEach가 실행된다면
이때, BeforeEach 안의
memberService = appConfig.memberService
이 코드가 memberService를 선언한 적이 없어서
오류가 발생해야 한다고 생각이 들었습니다.
하지만 잘 실행되는 이유가 궁금합니다.
제 생각에는 테스트 전에 실행되는 것이니
MemberService memberService;
memberService = appConfig.memberService
이런식으로 BeforeEach에 들어가 있어야만
된다고 생각이 들었습니다.
1. 왜 BeforeEach를 사용해야지만 appConfig
객체의 메소드로 memberService를 넣어줄 수
있고, 저 Test code가 정상 작동하는지 ?
2. BeforeEach는 테스트 전에 무조건 실행
되는데 어떻게 MemberService 클래스 변수의
선언이 BeforeEach에 밖에 존재하는지 ?
두가지입니다. 감사합니다.
답변 1
0
안녕하세요. 유진이님, 공식 서포터즈 David입니다.
1. 멤버변수 선언부에서는 선언, 선언과 동시에 초기화하는 것 이외에는 문법적으로 허용되지 않습니다.
자바 기본 문법이오니 참고해주세요.
https://docs.oracle.com/javase/tutorial/java/javaOO/variables.html
2. BeforeEach가 붙은 메서드는 각 테스트 메서드 실행 전에 실행됩니다. 따라서 멤버 변수로 선언된 memberService에 값을 할당할 수 있습니다.
감사합니다.
0
답변 감사드립니다. 일단 보내주신 링크 들어가서 봤는데, 해당 내용은 안보이네요. 개인적으로 자바 기본 문법을 좀 공부해야할 것 같습니다. 강의를 들으며 의문 사항을 질문하다 보면 이론으로는 알았다고 생각했는데, 사용하지 않아보니 명확한 의미가 정립되어 있지 않아서 이런 류의 질문을 많이 하게되네요.
그리고 말씀해주신걸 토대로 저 코드를 해석해보니 memberService와 AppConfig를 멤버 변수로 선언 하거나 선언하면서 바로 초기화 하는 것은 문제 없지만, 위의 코드에서는 memberService를 선언한 뒤 memberService 변수에 값을 초기화 하려고 하니까 오류가 났다는 의미가 맞는지 잘 모르겠습니다. 더 나아가 main 메소드 안에서는 해당 행위가 되기 때문에 본문의 코드가 작동했던 것이고, 클래스에서 직접 사용할때는 안된다는 것으로 이해했습니다. 사실 선언과 동시에 초기화와 선언 후 초기화 하는게 어떤 차이가 있길래 전자는 되고 후자는 안되는지에 대해서는 좀 의아하네요. 즉, 아래와 같은 코드는 된다는 것이고 본문에 기재한 코드는 안된다는게 그냥 자바에서 정해놓은 문법 그 자체인 것인지, 또 다른 이유가 있는 것인지 궁금합니다.
그리고 두번째 질문은 강의 중 테스트 전에 실행된다는 말을 해당 클래스가 실행되기 전이라고 받아들여서 저런 질문을 하게 됐던것 같습니다. 전체를 뜻하는줄 알았는데 각각의 테스트 메서드 실행전에 각각 한번씩 실행이 된다는 말씀으로 이해했습니다.
늘 친절한 답변 해주시고, 모르는 부분에 대해 많은 도움 주셔서 감사합니다. 개발자님과 David님을 비롯한 여러 서포터즈 분들 늘 건강하고 좋은 일이 많으셨으면 좋겠습니다.
0
추가적으로 착각한점이 MemberApp을 보면 본문에서와 같이 코드를 입력한줄 알았는데,
이와같이 코드를 입력했습니다. 그렇다면 테스트 코드에서도 위 코드는 동작하는데 영한님께서 왜 BeforeEach를 사용한건지도 알 수 있을까요? 그냥 해당 기능을 알려주기 위해서 사용하셨다고 생각하면 될까요?
0
1. 자바 문법입니다.
2. 원래 테스트는 각 메서드 간 동일한 환경에서 실행되게 해야합니다. 그래서 사용되는 객체를 초기화 해주는 것이고요. 물론 강의에서 memoryMemberRepository 내 저장공간을 static으로 선언해서 초기화해도 영향을 미치지 않습니다만 일반적으로는 사용되는 객체를 초기화해줍니다.
섹션3. 11 회원객체 다이어그램
0
26
1
OCP, DIP과 @Qualifier 어노테이션에 대해서 질문합니다.
0
24
1
코드 자료
0
62
2
구현체가 동적으로 정해질 때, 팩토리 기법을 사용하나요?
0
67
2
MemberService의 인터페이스를 왜 사용하는지 궁금합니다.
0
88
1
롬복 @Setter를 써야 하는 상황이 있는건가요?
0
97
1
빈 등록 메서드의 파라미터가 빈이 아니어도 되나요?
0
83
1
테스트 속도가 나중에 영향이 있을까요?
0
84
1
gradle 설정 안떠서 질문 남깁니다!
0
129
2
build.gradle로 프로젝트를 여는 이유
0
93
1
provider 사용하는 이유
0
95
1
다음 강의 뭘 들어야 할까요
0
131
2
프로토타입 빈, 직접 destroy 호출 안 할 경우
0
66
1
beanB
0
85
2
퀴즈다시풀기
0
70
1
Gradle로 바꿔도 오류가 똑같이 발생하네요 ㅠㅠ
0
98
2
"중복 등록과 충돌" 강의에서 강사님과 다른 에러가 발생합니다.
0
67
3
run 실행했는데 결과창이 이렇게 뜨네요 왜 그런건가요>
0
107
2
도메인의 정의?
0
60
1
ApplicationContext 질문입니다.
0
67
1
@Scope의 proxyMode를 사용할때 단위 테스트 방법
0
95
2
ai api 선정하기 관련 질문
0
125
2
생성자 자동주입 관련해서
0
68
1
생성자 직접 호출 vs 팩토리 메서드 패턴
0
99
2





