gpt4 book ai didi

java - 如何使用 Fitnesse 测试夹具加载 Spring 的应用程序上下文?

转载 作者:行者123 更新时间:2023-11-30 09:47:51 25 4
gpt4 key购买 nike

我有这个测试夹具,我想用 Fitnesse 运行,它涉及到使用 Spring。我无法使用 ClasspathXmlApplicationContext 加载 spring 应用程序上下文,我确定这是一个类路径配置问题,我只是还没有弄明白。

这是我的设置。

Project contents

如您所见,fitnesse.jar 在项目中,因此我可以在任何有项目工作副本的地方运行 fitnesse 服务器和测试(所有 wiki 文件都在 FitNesseRoot 文件夹中)。 bin 是项目的输出文件夹(所有 .class 都在这里)。

现在,代码:

InventarioQueryTest(来自 Fitnesse 的维基页面,注意 !path 声明)

!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 调用)中的内容,但显然它没有……

有什么想法吗?非常感谢您的宝贵时间!

最佳答案

好的,我通过在 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)。 至少在 Spring 2 中不会

这与Fitnesse无关,都是 Spring ......

关于java - 如何使用 Fitnesse 测试夹具加载 Spring 的应用程序上下文?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6512838/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com