@Getter
@Setter
@Builder
@NoArgsConstructor //JPA나 json parser 쓸때 꼭있어야하고
@AllArgsConstructor //생성자를 직접 선언하고 모든 생성자에 @Builder 쓸거아님...넣어야함/안넘에러
public class 강원도 {
private int 인구수;
private int 가수수;
private spring 시;
private spring 동;
private spring 길;
}
가정하자.......내고향 뽀록난다....다시짜기 귀찮으니 패스!
강원도 k = 강원도.builder()
.인구수(400000)
.가구수(400000)
.시("많은시")
.동("많은동")
.길("여러길")
.build();
package portal.control.web; //경로 중요
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
import java.util.Map;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import portal.commons.data.Box;
import portal.service.BoardService;
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration //이거 중요
@EnableWebMvc
@ContextConfiguration(locations = "classpath:conf/context-*.xml")
public class AdminBoardTest {
@Autowired
private BoardService boardService;
// 잊지말자 접근제한자ㅜㅜ
@Autowired
private WebApplicationContext wac;
private MockMvc mockMvc;
@Before // JUINT껄로 임포트
public void setup() {
// mockMvc 사용하기 위해 builder와 wac객체를 이용하여 setup!
this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).build();
}
@Test
public void testGetBoardList() {
// fail("Not yet implemented"); 없다면 아무것도 검증하지 않으므로 성공임....
}
@Test
public void testGoBoardInfoPop() {
// fail("Not yet implemented");
try {
Box box = new Box();
box.put("s_board_code", "NOTICE");
box.put("program_code", "BOARD");
box.put("action_mode", "modify");
box.put("id", "64");
Map view = boardService.getBoardView(box);
assertNotNull(view);
} catch (Exception e) {
}
}
@Test
public void testGoBoardInfoPopMock() {
// MockMvc객체로 하는 테스트
try {
System.out.println(mockMvc);
MultiValueMap<String, String> info = new LinkedMultiValueMap<>();
info.add("s_board_code", "NOTICE");
info.add("program_code", "BOARD");
info.add("action_mode", "modify");
info.add("id", "64");
mockMvc.perform(get("mg/board/goBoardInfoPop.do") // 1, 2 perform 어떤 메소드,,, 어떤 url인가를 지정하는 것
.params(info)) // 3
.andDo(print()) //andDo 결과확인을 위해...print 콘솔에 출력
.andExpect(status().isOk()).andReturn(); // 4 성공 할꺼를 예상하고 결과값중에 출력란것..
assertTrue(true);
} catch (Exception e) {
}
}
@Test
public void testGoBoardAction() {
// fail("Not yet implemented");
}
}
1. 패키지 경로 중요합니다. 그냥 대충 상위폴더에 만들고 진행했더니 에러 발생했습니다. 감싼 패키지name을 맞추고 진행했더니 되었습니다.
2 Caused by: java.lang.NoClassDefFoundError: javax/servlet/ServletContext //이 익셉션은 JVM이 내부의 클래스 정의 데이터 구조(class definition data structure)에서 Class를 찾지 못했다는 것을 나타낸다
Caused by: java.lang.ClassNotFoundException: javax.servlet.ServletContext //이 익셉션은 Classpath에 로드하고자 하는 Class가 발견되지 않았을 때 발생한다. 보통은 빌드에 문제가 있는 경우로 clean이나 Class파일 삭제 후 재빌드를 수행하여 해결한다
이런에러가 발생했습니다....
servlet과 관련된 에러들이 계속 발생했다..... 프로젝트 업데이트를 해도 발생했는데 ....
어찌저지....Modulepath에 JRE만 남겨놓고 나머지는 Classpath쪽으로 이동시키니깐 저 에러는 해결되었음...
org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.test.context.web.WebDelegatingSmartContextLoader]: Constructor threw exception; nested exception is java.lang.NoClassDefFoundError: javax/servlet/ServletContext at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:224) at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:146) at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:176) at org.springframework.test.context.support.AbstractTestContextBootstrapper.resolveContextLoader(AbstractTestContextBootstrapper.java:455) at org.springframework.test.context.support.AbstractTestContextBootstrapper.buildMergedContextConfiguration(AbstractTestContextBootstrapper.java:346) at org.springframework.test.context.support.AbstractTestContextBootstrapper.buildMergedContextConfiguration(AbstractTestContextBootstrapper.java:291) at org.springframework.test.context.support.AbstractTestContextBootstrapper.buildTestContext(AbstractTestContextBootstrapper.java:107) at org.springframework.test.context.TestContextManager.<init>(TestContextManager.java:137) at org.springframework.test.context.TestContextManager.<init>(TestContextManager.java:122) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTestContextManager(SpringJUnit4ClassRunner.java:151) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.<init>(SpringJUnit4ClassRunner.java:142) at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) at org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:104) at org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:86) at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:70) at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:37) at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:70) at org.junit.internal.requests.ClassRequest.createRunner(ClassRequest.java:28) at org.junit.internal.requests.MemoizingRequest.getRunner(MemoizingRequest.java:19) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createUnfilteredTest(JUnit4TestLoader.java:90) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createTest(JUnit4TestLoader.java:76) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.loadTests(JUnit4TestLoader.java:49) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:513) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:756) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:452) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:210)
Caused by: java.lang.NoClassDefFoundError: javax/servlet/ServletContext //이 익셉션은 JVM이 내부의 클래스 정의 데이터 구조(class definition data structure)에서 Class를 찾지 못했다는 것을 나타낸다
at org.springframework.test.context.web.WebDelegatingSmartContextLoader.<init>(WebDelegatingSmartContextLoader.java:63) at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:211) ... 29 more
Caused by: java.lang.ClassNotFoundException: javax.servlet.ServletContext //이 익셉션은 Classpath에 로드하고자 하는 Class가 발견되지 않았을 때 발생한다. 보통은 빌드에 문제가 있는 경우로 clean이나 Class파일 삭제 후 재빌드를 수행하여 해결한다
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520) ... 36 more
13:43:41.637 [main] DEBUG org.springframework.test.web.servlet.TestDispatcherServlet - GET "/mg/board/goBoardInfoPop.do", parameters={masked} 13:43:41.638 [main] WARN org.springframework.web.servlet.PageNotFound - No mapping for GET /mg/board/goBoardInfoPop.do
java.lang.AssertionError: Status expected:<200> but was:<404>
1. DI설정...이건 pom이 없어서 잘모르겠으나 여러 xml파일통해서 문제가 없어보이고 앞선 test가 문제없어 패스
<!-- test -->
<!-- https://mvnrepository.com/artifact/org.springframework/spring-test -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.2.18.RELEASE</version> <!--하단에 TEST Junit이 있는데 그냥 위에다 붙였다...자바 버전과 일치해야하기때문에 체크해야한다. -->
<scope>test</scope>
</dependency>
<!-- Test -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
pom.xml수정
@Repository
public class CustomerStoreLogic {
@Autowired
private SqlSession sqlSession; //인터페이스 결합도를 약하게 하게 위해 //templi을 쓰면 결합도가 강해서 나중에 session으로 변경된다.
public int registerCustomer(Customer customer) {
int result = sqlSession.insert("",customer);
return result;
}
}