복붙노트

[SPRING] Junit 테스트에서 종속성을 주입 할 수 없음

SPRING

Junit 테스트에서 종속성을 주입 할 수 없음

내 JUnit 테스트 클래스 중 하나에 종속성을 주입하는 데 어려움이 있습니다. 나는 TestApplication이 패키지 스캐닝이 아니거나로드되지 않았다고 생각한다.

아래 코드 :

package com.mitto.repositories;

import static org.junit.Assert.*;

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.TestExecutionListeners;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.support.DependencyInjectionTestExecutionListener;
import org.springframework.test.context.transaction.TransactionalTestExecutionListener;

import com.github.springtestdbunit.DbUnitTestExecutionListener;
import com.github.springtestdbunit.annotation.DatabaseSetup;
import com.mitto.MittoApplicationTests;
import com.mitto.domain.User;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration( classes= { MittoApplicationTests.class } )
@TestExecutionListeners({DependencyInjectionTestExecutionListener.class,
    TransactionalTestExecutionListener.class,
    DbUnitTestExecutionListener.class})
@DatabaseSetup("UserRepositoryTest.xml")
public class UserRepositoryTest {

    @Autowired
    UserRepository repository;

    private static final long FACEBOOK_ID = 1234567;

    @Test
    public void getUserById() {
        User user = repository.findOne(1L);
        assertNotNull(user);
        assertEquals( user.getFacebookId(), FACEBOOK_ID  );
    }
}

MittoApplicationTests.java

package com.mitto;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest
public class MittoApplicationTests {

    @Test
    public void contextLoads() {
    }    
}

UserRepository.java

package com.mitto.repositories;

import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.stereotype.Repository;

import com.mitto.domain.User;

@Repository
public interface UserRepository extends PagingAndSortingRepository<User, Long>{

    User findByFacebookId( long facebookId );
    User findByAuthToken( String token );

}

나는 이것에 대해 잘못된 것을 볼 수 없다.

해결법

  1. ==============================

    1.때로는 작업 예제가 수정보다 낫습니다. 다음은 실제 예제입니다.

    때로는 작업 예제가 수정보다 낫습니다. 다음은 실제 예제입니다.

    첫째, 구성 클래스에서

    @SpringBootApplication
    @ComponentScan(value = "com.mitto")
    @EnableJpaRepositories(value = "com.mitto")
    @EntityScan(basePackages = {"com.mitto.domain"}, basePackageClasses = {Jsr310JpaConverters.class})
    public class MittoApplicationTests {
    }
    

    둘째, 테스트 클래스에서

    @RunWith(SpringJUnit4ClassRunner.class)
    @SpringBootTest(classes = MittoApplicationTests.class) // replace the @ContextConfiguration with @SpringBootTest
    // rest of of your annotations ... 
    public class UserRepositoryTest {
        @Autowired
        UserRepository repository;
    
        // your test cases
    }  
    

    자세한 내용은 설명서를 읽으십시오.

    SpringBootTest 주석

    부팅 기능 테스트

  2. from https://stackoverflow.com/questions/39823045/unable-to-inject-dependency-in-junit-test by cc-by-sa and MIT license