2017-10-19 25 views
0

私はJavaユニットテストを持っている:ユニットテスト - 相対パスによりテストが失敗しますか?

@Test 
public void shouldCreateCorectPerson() throws IOException, ParseException { 

    //test data 
    Person expectedPerson = createExpectedObject(PersonsTest.class.getResourceAsStream("/com/my/package/personStub/person1Stub.json")); 

    //other code and asserts... 


} 


     protected static Person createExpectedPerson(InputStream inputStream) throws IOException { 

     Gson gson = new Gson(); 
     Person expectedPerson = gson.fromJson(IOUtils.toString(inputStream, StandardCharsets.UTF_8), Person.class); 
     return expectedPerson; 
    } 

相対パスを使用して、私はIntelijでローカルにこのテストを実行すると、期待どおりに動作しますが、私はジェンキンスでそれを実行すると、それが失敗し、それが原因私にはありますか?例:

/com/my/package/personStub/person1Stub.json 

ゲンキンズとローカルで実行しているときにこのファイルのパスが見つかるようにするにはどうすればよいですか?

+0

何ビルドシステムあなたは、Gradleの、Mavenのか、何か他のものを使用しているの? –

+0

jsonファイルの場所はどこですか?テストファイルと同じパッケージに入っていますか? – Mitch

+0

代わりに 'ClassLoader.getResourceAsStream'を' PersonsTest.class.getClassLoader()。getResourceAsStream(...) 'の代わりに使用してください。また、getResourceAsStreamに渡すパスの先頭にある '/'を削除してみてください(私は違いがあるとは確信していません)。 –

答えて

1

person1Stub.jsonは、あなたがあなたのビルドシステムからテストを実行すると、あなたのクラスパス上にあると仮定すると、次のような作品を行います。

Person expectedPerson = createExpectedObject(PersonsTest.class.getClassLoader().getResourceAsStream("com/my/package/personStub/person1Stub.json")); 
+0

いいえ/なしでは動作しません。 – java123999

+0

ok - 'ClassLoader.getResourceAsStream'を使ってロードすると動作しますか? –

関連する問題