2017-03-08 16 views
0

を指しているリソースインスタンスを配線し、私はこれを使用して非常にいくつかの例を見てきましたし、それが動作するように取得しようとしたができませんでした:春@valueは、JSONファイル

package com.acme.service; 

public class SampleServiceTest { 

    @Value("classpath:data.json") 
    private Resource jsonData; 

    @Test 
    public void testThis() { 
     String json = String.join("\n", Files.readLines(jsonData.getFile(), Charset.defaultCharset())); 
    } 
} 

私のファイル構造(次のようにMavenの標準)は、次の次のとおりです。

data-microservice (top folder) 
    -src/test/java/com/acme/service/SampleServiceTest 
    -src/test/resources/data.json 

、私はこれらのいくつかを試してみたが、動作していないよう:

  1. クラスパス:data.json
  2. クラスパス:
  3. /data.jsonクラスパス:SRC /テスト/リソース/ data.json
  4. クラスパス:

/src/test/resources/data.jsonこの上で助けを得るために探ししてください、また、あなたが正しいパスに背景を提供することができれば(すなわち、なぜ正しい経路が働くのか)。

+0

最初の2つのどちらかがうまくいきます。実際の起動ではなく、テストでこれを実行していると仮定します。 – chrylis

答えて

0

これを見つけて、私は愚かで、春の文脈なしでテストを実行していました。それはちょうどテストクラスにこれらの注釈を入れるの問題だった:

@RunWith(SpringJUnit4ClassRunner.class) 
@SpringApplicationConfiguration(classes = Application.class) 
public SampleServiceTest { 
    //body here 
} 

そして「クラスパス:data.json」作品!

ディレクトリパス(src/test/resources)を指定せずにクラスパスが動作する理由を誰かが説明できるのであれば、本当に役に立ちます。

+0

IDEを使用すると、クラスパスにどのフォルダを含めるべきかをプロジェクトで指定できます。パスsrc/test/resourcesはクラスパスの一部でなければなりません。IDEがデフォルトで設定する必要があります。 – artemisian

関連する問題