102. junit사용하기

hanahana·2022년 11월 9일
0

Spring 학원수강

목록 보기
42/45
post-thumbnail

설치하기

spring 프로젝트에서 pom.xml에 해당 라이브러리 주소를 넣어준다.

<!-- https://mvnrepository.com/artifact/org.springframework/spring-test -->
		<dependency>
		    <groupId>org.springframework</groupId>
		    <artifactId>spring-test</artifactId>
		    <version>5.2.18.RELEASE</version>
		    <scope>test</scope>
		</dependency>
  • <version>5.2.18.RELEASE</version> 은 java버전과 동일하게 한다.
    <properties>
    		<java-version>1.8</java-version>
    		<org.springframework-version>5.2.18.RELEASE</org.springframework-version>
    		<org.aspectj-version>1.6.10</org.aspectj-version>
    		<org.slf4j-version>1.6.6</org.slf4j-version>
    	</properties>
    • pom 상단에 org.springframework-version 과 같은것으로 해주면 된다.

테스트해보기

테스트할 클래스 먼저 만들기

  • 먼저 테스트할 원본클래스를 생성한다.

    @Repository
    public class CustomerStoreLogic {
    
    	@Autowired
    	private SqlSession sqlSession; // sqlSessionTemplate를 쓰면 결합도가 강함
    	//sqlSession은 인터페이스임
    	
    	public int resgisterCustomer(Customer customer){
    		int result = sqlSession.insert("CutomerMapper.insertCustomer",customer);
    		return result;
    		
    	}
    }
  • src/test/java 폴더에 똑같은 패키지를 생성한다

  • com.어쩌구 저쩌구.어쩌구.패키지명

  • new - other-JUnit-jUnit Test Case

  • Name에 내가 테스트할 클래스명Test를 붙여 적는다

  • class under test Browse버튼을 눌러 테스트할 클래스를 선택한다

  • 만든 클래스
    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(locations = {"file:src/main/webapp/WEB-INF/spring/root-context.xml"})
    public class CustoerStoreLogicTest {
    
    	@Autowired
    	private CustomerStoreLogic store; //원본 클래스 불러오기
    	
    	@Test
    	public void test() {
    		Customer customer = new Customer();
    		customer.setId("user1");
    		customer.setName("일용자");
    		customer.setAge(21);
    		int result = store.resgisterCustomer(customer); //원본클래스에 메소드에 값을 넣어준다.
    		//int result = store.registerCustomer(new Customer("user1","일용자",21));
    		assertEquals(1, result); //성공,실패 테스트값을 전송해주는 코드
    	}
    
    }
  • 이 상태로는 작동하지 않는다, test하려는 CustomerSotreLogic이 연결되지 않았기때문이다.
  • root-context에 bean으로 해당파일을 등록해준다.
    <bean id="sutomerStore" class="com.kh.junspring.customer.store.CustomerStoreLogic"></bean>
  • 현재 해당 class의 @Repository가 작동하지 않기때문에 어노테이션을 지워준다.

오류발생!

  • 그래도 오류가 발생했다.
java.lang.ExceptionInInitializerError
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
	at org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:31)
	at org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:24)
	at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57)
	at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:29)
	at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57)
	at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:24)
	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:526)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:770)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:464)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:210)
Caused by: java.lang.IllegalStateException: SpringJUnit4ClassRunner requires JUnit 4.12 or higher.
	at org.springframework.util.Assert.state(Assert.java:76)
	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.<clinit>(SpringJUnit4ClassRunner.java:104)
	... 17 more
  • 이 오류는 Junit의 버전이 잘못되었다는 오류이다.
    • Caused by: java.lang.IllegalStateException: SpringJUnit4ClassRunner requires JUnit 4.12 or higher.
    • 이 메세지에 따라 pom.xml에 있는 JUnit의 버전을 4.21로 고쳐준다.
      <dependency>
      			<!-- spring -->
      			<groupId>junit</groupId>
      			<artifactId>junit</artifactId>
      			<version>4.12</version>
      			<scope>test</scope>
      		</dependency>
  • 이제 정상실행되며 실제로 테이블에 해당값이 저장된다.

@Repository 사용하도록 만들기

  • 이번엔 bean을 등록하지 않고 해본다.
  • 아까 root-context에 입력해주었던 빈을 삭제한다.
  • 지웠던 원본클래스의 어노테이션을 복구한다.
  • 테스트 클래스에 servlet-context를 넣어준다.
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"file:src/main/webapp/WEB-INF/spring/root-context.xml",
		"file:src/main/webapp/WEB-INF/spring/appServlet/servlet-context.xml"
	
})

이렇게 {”주소”,”주소”}를 활용하여 root-context와 servlet-context를 둘다 넣어주면 된다.

테스트 실행하기

  • 파일을 선택하고 오른쪽 키 RunAs-Junit Test를 눌러주면된다.

profile
hello world

0개의 댓글