• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

회원 가입 리팩토링 및 테스트 영상 질문입니다.

21.01.29 22:03 작성 조회수 234

0

@DisplayName("회원 가입 처리 - 입력값 정상")

@Test

void signUpSubmit_with_correct_input() throws Exception {

mockMvc.perform(post("/sign-up")

.param("nickname", "keesun")

.param("email", "email@gmail.com")

.param("password", "12345678")

.with(csrf()))

.andExpect(status().is3xxRedirection())

.andExpect(view().name("redirect:/"));

assertTrue(accountRepository.existsByEmail("email@gmail.com"));

BDDMockito.then(JavaMailSender).should().send(any(SimpleMailMessage.class));

}

회원 가입 처리 - 입력값 정상 테스트의 마지막줄인

BDDMockito.then(JavaMailSender).should().send(any(SimpleMailMessage.class));

쪽이 인식을 못하고 빨간줄을 내보냅니다.

영상에서는

then(JavaMailSender).should().send(any(SimpleMailMessage.class));

코드인데 then 앞에 BDDMockito.를 선언 안하면 아예 인식을 못하더군요.

BDDMockito를 사용하여 then을 인식시키면

에러가 뜹니다.

.send(any(SimpleMailMessage.class)); 센드쪽에서 any들어가는걸 인식 못하는것 같은데 junit을 써본적이 없어서 이부분을 잘 모르겠습니다.

어디가 잘못 된건지 알 수 있을까요???

spring boot version 2.4.2 입니다.

java 11입니다.

=======================================================================================

package com.studyolle;

 

import static org.hamcrest.CoreMatchers.any;

import static org.junit.jupiter.api.Assertions.assertTrue;

import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.csrf;

import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;

import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;

import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;

import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.model;

import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.view;

 

import javax.mail.internet.MimeMessage;

 

import org.junit.jupiter.api.DisplayName;

import org.junit.jupiter.api.Test;

import org.mockito.BDDMockito;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;

import org.springframework.boot.test.context.SpringBootTest;

import org.springframework.boot.test.mock.mockito.MockBean;

import org.springframework.mail.SimpleMailMessage;

import org.springframework.mail.javamail.JavaMailSender;

import org.springframework.test.web.servlet.MockMvc;

 

import com.studyolle.account.AccountRepository;

 

@SpringBootTest

@AutoConfigureMockMvc

class AppTests {

 

@Autowired private MockMvc mockMvc;

@Autowired private AccountRepository accountRepository;

@MockBean

JavaMailSender JavaMailSender;

@DisplayName("회원 가입 화면 보이는지 테스트")

@Test

void signUpForm() throws Exception {

mockMvc.perform(get("/sign-up"))

.andDo(print())

.andExpect(status().isOk())

.andExpect(view().name("account/sign-up"))

.andExpect(model().attributeExists("signUpForm"));

}

 

@DisplayName("회원 가입 처리 - 입력값 오류")

@Test

void signUpSubmit_with_wrong_input() throws Exception {

mockMvc.perform(post("/sign-up")

.param("nickname", "keesun")

.param("email", "email..")

.param("password", "12345")

.with(csrf()))

.andExpect(status().isOk())

.andExpect(view().name("account/sign-up"));

}

@DisplayName("회원 가입 처리 - 입력값 정상")

@Test

void signUpSubmit_with_correct_input() throws Exception {

mockMvc.perform(post("/sign-up")

.param("nickname", "keesun")

.param("email", "email@gmail.com")

.param("password", "12345678")

.with(csrf()))

.andExpect(status().is3xxRedirection())

.andExpect(view().name("redirect:/"));

assertTrue(accountRepository.existsByEmail("email@gmail.com"));

BDDMockito.then(JavaMailSender).should().send (any(SimpleMailMessage.class));

}

}

답변 1

답변을 작성해보세요.

0

import 문이 겹쳐서 그래요. 다른 import 문 중에 then을 이미 static import하는 곳이 있습니다. 그래서 둘 중 하나는 명시적으로 어디에 있는 then인지 직접 써줘야 하는거죠.