2016-09-13 1 views
1

の間のGradleで置換されていません。 私はサービスのステータスを与えるStatusControllerクラスを持っています。これには、サービス名、ビルドタイム、環境、バージョンが含まれます。ここで 春のブート値が、これは春ブーツやGradleの問題私はRESTfulサービスを構築するために、スプリングブーツ1.4を使用しています</p> <p>であれば、私は知らない統合テスト

は私のコントローラである

@RestController 
public class StatusController 
{ 

    @Value("${service.version: not configured}") 
    private String version; 

    @Value("${service.name: not configured}") 
    private String appName; 

    @Value("${service.env: not configured}") 
    private String env; 

    @Value("${service.timestamp: not configured}") 
    private String buildDate; 

    @RequestMapping(value = "/status", method = RequestMethod.GET) 
    @ResponseStatus(HttpStatus.OK) 
    @ResponseBody 
    public String getStatus() throws JsonProcessingException { 
     Map<String,String> map = new HashMap<>(); 
     map.put("version", version); 
     map.put("appName", appName); 
     map.put("env", env); 
     map.put("buildDate", buildDate); 
     return new ObjectMapper().writeValueAsString(map); 

    } 
} 

のsrc /メイン/リソース/ application.properties

service.name=${name} 
service.version=${version} 
service.timestamp=${timestamp} 

build.gradle(のみ関連セクション)

processResources { 
    expand project.properties 
} 

def buildTime() { 
    def today = new Date() 
    def formattedDate = today.format('MM-dd-yyyy HH:mm:ss z') 
    return formattedDate 
} 

ext.timestamp=buildTime() 

私はバージョンdeを持っています私は私のサービスを開始(bootRunをgradlew)と私は/ステータスを打ったときgradle.properties

version=1.0.0-SNAPSHOT. 

で罰金、私が注入されたすべての値(ない「に設定されていない」のデフォルト値を参照してください。しかし、私のテストでは、置換されていない値が表示されていますが、デフォルト値は注入されています。

は、ここで私は値がテストクラスに置換されていない確認し、私のテストクラスデバッガを使用して

@RunWith(SpringRunner.class) 
@SpringBootTest(webEnvironment= SpringBootTest.WebEnvironment.RANDOM_PORT) 
public class ApplicationTests { 
    @Test 
    public void contextLoads() { 
     System.out.println("test passed"); 
    } 

    @Value("${service.version: not configured}") 
    private String version; 

    @Value("${service.name: not configured}") 
    private String appName; 

    @Value("${service.env: not configured}") 
    private String env; 

    @Value("${service.timestamp: not configured}") 
    private String buildDate; 

    @Autowired 
    private TestRestTemplate restTemplate; 

    @Test 
    public void exampleTest() throws Exception { 
     String lifeCheck = this.restTemplate.getForObject("/status", String.class); 
     System.out.print(lifeCheck); 
    } 
} 

です。 だけでなく、コントローラここ

に置換されていないが、テスト

{"appName":" not configured","buildDate":" not configured","env":" not configured","version":" not configured"} 
+0

どのようにテストを行っていますか?コマンドラインからGradleを介して? IDEのテストサポートを使用しないIDE内 –

+0

IDEでテストを実行している場合は、次のGradleフォーラムディスカッションが役に立ちます:https://discuss.gradle.org/t/gradle-eclipse-seems-to-ignore-any-user-defined- logic-in-processresources-and-processtestresources-tasks/7358/9 –

答えて

0

上で動作してからの出力はGradleの中に別のタスクは、あなたの中にapplication.properties processTestResources

+0

なぜそれは重要ですか?私はsrc/main/resources/application.propertiesの 'ProcessResources'にあるプレースホルダを置き換えます –

+0

はい、テストでは' src/test/resources/application.properties'を使用しています。 、例えば'processTestResources' – rorschach

0

場所が呼ばれていますことを忘れてはいけないですsrc/test/resources/

テストクラスでは、主なリソースを確認できません。値は、テストリソースフォルダに配置すると置換されます。 :)

+0

私は値を注入しています。注入の順番はsrc/main/resources/application.propertiesに続けてsrc/test/resources/application.propertiesとなります。とにかく、テストリソースフォルダに置かれていませんでした。 –

+1

春のブートテストで 'src/main/resources'の' application.properties'ファイルを取得できることを指摘したいだけです。この回答は正しくありません。 –

関連する問題