2012-05-30 80 views
5

我正在创建一个Java单元测试来测试我最近更改的一些代码。但是,我测试的方法在Mycompany_xml/src/test/java/uk/co/mycompany/xmlapi/RequestProcessorTestNew.javaJava单元测试无法访问ResourceBundle

实例

ResourceBundle.getBundle("businessVariables").getString("product.name")); 

资源文件住在web包在Mycompany_web/src/main/webapp/WEB-INF/classes/businessVariables.properties

我的测试生命在我的XML包,它使用的ResourceBundle类...在正常运行时资源包是可访问的,但不是当我的单元测试运行时。它会引发此错误...

Testcase: testCreateInitialStatusResponse(uk.co.mycompany.xmlapi.RequestProcessorTestNew): Caused an ERROR 
null 
java.lang.reflect.InvocationTargetException 
    at uk.co.mycompany.xmlapi.RequestProcessorTestNew.testCreateInitialStatusResponse(RequestProcessorTestNew.java:62) 
Caused by: java.lang.ExceptionInInitializerError 
    at uk.co.mycompany.xmlapi.RequestProcessorImpl.createInitialStatusResponse(RequestProcessorImpl.java:812) 
Caused by: java.util.MissingResourceException: Can't find bundle for base name businessVariables, locale en_US 

我该怎么办?我可以启用我的测试以某种方式查看资源包吗?我可以在某处以某种方式创建一个模拟资源文件,代码将能够看到吗?

+0

您是否尝试过重新命名包适合的'en_Us'区域?请参阅http://stackoverflow.com/questions/2083159/cant-find-bundle-for-base-name – Asaf

+0

无论如何,继Kaylan的回答之后,'/ webapp/WEB-INF/classes'好像是*目标*文件夹。看看你的项目结构 - 捆绑文件最好在例如'Mycompany_web/src/main/resources/businessVariables.properties' – Asaf

回答

5

如果您已根据Maven原型构建项目结构,那么您的资源束理想情况下应该位于Mycompany_xml/src/test/resources中。然后,您可以使用mvn test从项目主目录(即Mycompany_xml目录)运行单元测试。

打包战争时,使用maven-assembly-plugin将资源包从Mycompany_xml/src/test/resources复制到war中。

+0

这是正确的。然而,也注意到POM文件可以定义替代的地方,把资源file.e.g $ {BASEDIR}/conf目录

1

添加

Mycompany_web/src/main/webapp/WEB-INF/classes/ 

到你的单元测试在运行的类路径。