2016-07-23 2 views
3

Spock으로 내 Spring Boot 1.4.0에 대한 테스트를 작성하려고하는데 응용 프로그램 테스트 등록 정보 파일이 선택되지 않았습니다.spring boot 1.4, spock 및 application.properties

내 Gradle을이 있습니다

dependencies { 

    compile('org.springframework.boot:spring-boot-starter-data-jpa') 
    compile('org.springframework.boot:spring-boot-starter-security') 
    compile('org.springframework.boot:spring-boot-starter-web') 
    compile 'org.codehaus.groovy:groovy-all:2.4.1'  
    testCompile('org.springframework.boot:spring-boot-starter-test') 
    testCompile('org.spockframework:spock-spring:1.0-groovy-2.4') { 
} 

가 그럼 난

/SRC/테스트/그루비/자원이있다 : 마지막으로

# JWT Key 
[email protected] 

그리고 내 스포크 테스트 :

이 클래스를 테스트하고

는 :

@Component 
public class TokenUtility { 

    private static final Logger LOG = LoggerFactory.getLogger(TokenUtility.class); 

    @Value("${jwt.key}") 
    private String jwtKey; 

    public String buildToken(UserDetails user) { 
     return Jwts.builder() 
         .setSubject(user.getUsername()) 
         .signWith(SignatureAlgorithm.HS512, jwtKey) 
         .compact(); 
    } 

    public boolean validate(String token) { 
     try { 

      Jwts.parser().setSigningKey(jwtKey).parseClaimsJws(token); 
      return true; 

     } catch (SignatureException e) { 
      LOG.error("Invalid JWT found: " + token); 
     } 
     return false; 
    } 
} 

나는 원래 내 테스트에 TokenUtility를 인스턴스화하지만 application-test.properties (나는 jwtKey가 null 때부터 가정입니다)로드되지 않았다. 그래서 나는 테스트중인 @Autowired 클래스를 시도하고있다. 그러나 이제는 null이다.

스프링 부트 1.4가 테스트를 위해 많이 변경된 것처럼 보입니다. 아마도 이걸 정확하게 연결하지 않을 것입니까?

답변

6

테스트 코드에 몇 가지 문제가 있습니다. 먼저, 의존성이 나쁘다. Spock 1.0은 @SpringBootTest 주석을 지원하지 않으므로 컨텍스트가 초기화되지 않고 사후 처리가 수행되지 않으므로 널 포인터 예외가 발생한다. 자동 작성되는 것은 없다.

당신이 사용해야합니다 그래서 그 주석에 대한 지원은 아직 릴리스 후보 인 스팍 1.1에 추가되었습니다

다음
dependencies { 
    compile('org.springframework.boot:spring-boot-starter-data-jpa') 
    compile('org.springframework.boot:spring-boot-starter-security') 
    compile('org.springframework.boot:spring-boot-starter-web') 
    compile group: 'io.jsonwebtoken', name: 'jjwt', version: '0.6.0' 

    compile('org.codehaus.groovy:groovy') 

    testCompile('org.springframework.boot:spring-boot-starter-test') 
    testCompile('org.spockframework:spock-core:1.1-groovy-2.4-rc-1') 
    testCompile('org.spockframework:spock-spring:1.1-groovy-2.4-rc-1') 
    testCompile group: 'com.h2database', name: 'h2', version: '1.4.192' 
} 

의 application-test.properties에 경로가 잘못을 클래스 경로의 루트에 있으므로 /application-test.properties이어야합니다.

@SpringBootTest(classes = DemoApplication.class, 
       webEnvironment = WebEnvironment.RANDOM_PORT) 
@TestPropertySource("/application-test.properties") 
public class TokenUtilityTest extends Specification { 

    @Autowired 
    TokenUtility tokenUtility 

    def "test a valid token creation"() { 
     def userDetails = new User("test", "password", Collections.emptyList()); 

     when: 
     def token = tokenUtility.buildToken(userDetails) 

     then: 
     token != null 
    } 
} 
관련 문제