2017-10-19 120 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 

如何确保在jenkins和本地上运行时找到此文件的路径?

+0

构建什么系统? –

+0

json文件的位置在哪里?它与测试文件在同一个软件包中吗? – Mitch

+0

可能使用'ClassLoader.getResourceAsStream'代替:'PersonsTest.class.getClassLoader()。getResourceAsStream(...)'。另外,也许尝试删除传递给'getResourceAsStream'的路径上的前导'/'(尽管我不确定这是否有所作为) –

回答

1

假设person1Stub.json是在classpath中,当你从你的编译系统运行测试,做了以下工作:您正在使用,gradle这个,行家还是其他什么东西

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

没有它不工作没有/在前面 – java123999

+0

好吧 - 当你使用'ClassLoader.getResourceAsStream'加载时它工作吗? –