답변 데이터 150개 생성 오류
 @Transactional
    @Test
     void test() {
        Integer id = 357;
        Question question = this.questionService.getQuestion(id);
        SiteUser user = this.userService.getUser("test3");
        for (int i = 1; i <= 150; i++) {
          String content = String.format("답변테스트 답변데이터입니다:[%03d]", i);
          this.answerService.create(question, content, user);
      }
    }

junit 테스트 코드는 이렇구요,

getQuestion()메소드 코드는

    //id 값으로 Question 데이터를 조회하는 getQuestion 메서드
    public Question getQuestion(Integer id) {  
        Optional<Question> question = this.questionRepository.findById(id);
        if (question.isPresent()) {//Question 객체는 Optional 객체이기 때문에 위와 같이 isPresent 메서드로 해당 데이터가 존재하는지 검사하는 로직이 필요
            return question.get();
        } else {//만약 id 값에 해당하는 Question 데이터가 없을 경우에는 DataNotFoundException을 발생
            throw new DataNotFoundException("question not found");
        }
    }

getUser()메소드 코드는

    public SiteUser getUser(String username) {
        Optional<SiteUser> siteuser = this.userRepository.findByusername(username);
        if(siteuser.isPresent()) {
            return siteuser.get();
        }else {
            throw new DataNotFoundException("siteuser not found");
        }

    }

answerService의 create 메소드는

 public Answer create(Question question, String content,SiteUser author) {
        Answer answer = new Answer();
        answer.setContent(content);
        answer.setCreateDate(LocalDateTime.now());
        answer.setQuestion(question);
        answer.setAuthor(author);
        this.answerRepository.save(answer);
        return answer;
        //컨트롤러에서 답변이 등록된 위치로 이동하기 위해서는 답변 객체가 반드시 필요(앵커태그 사용 용도)
    }

이렇게 메소드로 구성되있고 junit 테스트로 답변데이터 160개를 생성하려고 하니 오류가 걸립니다.
(question id를 357로 지정 해놨는데 h2데이터베이스에도 357에 해당하는 question 데이터 확실히 존재하는거 확인했습니다.)
오류명 : java.lang.NullPointerException: Cannot invoke "com.mysite.sbb.question.QuestionSerice.getQuestion(java.lang.Integer)" because "this.questionServivce" is null

이렇게나오네요..(questionService는 임포트 된상태이며, 생성자까지 추가한 상태입니다.)

buzz781 354

M 2022년 12월 21일 10:44 오전

작성하신 테스트코드 전체를 보여주세요. - 박응용님, 2022년 12월 21일 10:30 오전 추천 , 대댓글
@박응용님 package com.mysite.sbb; import static org.junit.jupiter.api.Assertions.assertEquals; import java.util.List; import java.util.Optional; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.data.domain.Page; import com.mysite.sbb.answer.Answer; import com.mysite.sbb.answer.AnswerRepository; import com.mysite.sbb.answer.AnswerService; import com.mysite.sbb.question.Question; import com.mysite.sbb.question.QuestionRepository; import com.mysite.sbb.question.QuestionService; import com.mysite.sbb.user.UserService; import jakarta.transaction.Transactional; import lombok.RequiredArgsConstructor; import com.mysite.sbb.user.SiteUser; import com.mysite.sbb.user.UserRepository; @SpringBootTest class SbbApplicationTests { @Autowired private QuestionRepository questionRepository; private UserService userService; private UserRepository userRepository; private AnswerService answerService; private AnswerRepository answerRepository; private QuestionService questionService; // @Test // void testJpa() { // for (int i = 1; i <= 300; i++) { // String subject = String.format("테스트 데이터입니다:[%03d]", i); // String content = "내용무"; // this.questionService.create(subject, content,null); // } // } // @Transactional // @Test //// void checkAuthor() { //// SiteUser user = this.userService.getUser("test3"); //// //// System.out.println(user); //// Question q = new Question(); //// q= this.questionService.create("수정테스트", "수정1", user); //// questionRepository.save(q); //// assertEquals("종윤입니다", q.getAuthor()); // // // // } // @Test // void test() { // List<Answer> all = this.answerRepository.findAll(); // System.out.println("저의 사이즈는 ="+all.size()); // // } @Transactional @Test void test() { Optional<Question> question = this.questionRepository.findById(357);//357확실히잇음 Optional<SiteUser> user = this.userRepository.findByusername("test3"); for (int i = 1; i <= 150; i++) { String content = String.format("답변테스트 답변데이터입니다:[%03d]", i); this.answerService.create(question.get(), content, user.get()); } } // @Test // void test() { // Optional<Question> question = this.questionRepository.findById(357); // System.out.println("저는 id357입니다=>"+question.get().getSubject()); // // } } 넵 - buzz781님, 2022년 12월 21일 10:45 오전 추천 , 대댓글
@buzz781님 @Autowired는 각 변수마다 설정되어야 합니다. 지금은 한개만 되어 있네요. - 박응용님, 2022년 12월 21일 10:53 오전 추천 , 대댓글
@박응용님 해결됐습니다, 정말감사합니다! - buzz781님, 2022년 12월 22일 12:59 오전 추천 , 대댓글
목록으로