我有这个测试夹具我想用Fitnesse运行它涉及使用Spring。我无法使用ClasspathXmlApplicationContext加载spring应用程序上下文,我确信这是一个类路径配置,我还没想到它。
所以这是我的设置。
正如您所看到的,fitnesse.jar位于项目内部,因此我可以在任何有项目工作副本的地方运行fitnesse服务器和测试(所有Wiki文件都在FitNesseRoot文件夹中)。 bin 是项目的输出文件夹(所有.class都是)。
现在,代码:
InventarioQueryTest (来自Fitnesse的维基页面,请注意!路径声明)
!define TEST_SYSTEM {slim}
!path ../bin
!path ../web/WEB-INF/lib/**.jar
|import |
|com.softclear.inventario.test.fitnesse|
|Query:listar status |
|id|nombre|entidad|descripcion|
ListarStatus.java (Fitnesse调用的文字夹具)
public class ListarStatus {
private ServicioStatus serv;
private ClassPathXmlApplicationContext ctx;
//fitnesse calls the constructor
public ListarStatus(){
ctx = new ClassPathXmlApplicationContext(new String[] {
"applicationContext-ListarStatus.xml",
"applicationContext-dao.xml",
"applicationContext-hibernate.xml"});
//performs dependency injection of DAO and HibernateSession
serv = (ServicioStatus) ctx.getBean("servicioStatus");
}
//and the query method is the test
public List<Object> query() {
List<Status> lista = serv.listarStatus();
QueryResultBuilder builder = new QueryResultBuilder(Status.class);
QueryResult result = builder.build(lista.iterator());
return result.render();
}
}
我从我项目的工作副本中运行java -jar的fitnesse。当我运行测试时,这是fitnesse执行的命令:
java -cp fitnesse.jar;../bin;C:\Dev\WS\softclear\SistemaInventario\fitnesse\..\web\WEB-INF\lib\ajax\AjaxFileUpload-0.03.jar;%the.rest.of.the.web-inf/lib.jars...% fitnesse.slim.SlimService 8086
所有这些都会在测试中产生这个错误:
java.io.FileNotFoundException: class path resource [applicationContext-ListarStatus.xml] cannot be opened because it does not exist
据我所知,wiki中的!path ../ bin 应该表明所有子文件夹和东西都要包含在类路径中(java -cp调用),但显然它没有......
有什么想法吗?非常感谢你的时间!
答案 0 :(得分:2)
好的,所以我通过在ListarStatus类中执行此操作来解决它:
public ListarStatus() {
ctx = new ClassPathXmlApplicationContext(new String[] {
"/com/softclear/inventario/test/fitnesse/applicationContext-ListarStatus.xml",
"applicationContext-dao.xml",
"applicationContext-hibernate.xml"});
serv = (ServicioStatus) ctx.getBean("servicioStatus");
}
请注意,applicationContext-ListarStatus.xml文件具有相对路径,而不仅仅是文件名。
事实证明ClassPathXmlApplicationContext 不会在类路径中的任何地方搜索 ,就像我理解的那样(读这个,ClassPathXML的一部分...:http://freejavaclass.com/articles/j2ee/spring/spring_loading_types_ways.jsp) 。 至少不是在春季2 。
这与Fitnesse无关,这一切都是春天......