2016-07-23 9 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; 
    } 
} 

私はもともと(私はjwtKeyがnullだったので、想定しています)私のテストにTokenUtilityをインスタンス化しますがapplication-test.propertiesがロードされていませんでした。だから私はテスト中の@Autowiredクラスを試していますが、現在はnullです。

Spring Boot 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 
    } 
} 
関連する問題