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

时间:2011-06-28 20:42:34

标签: java spring automated-tests fitnesse

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

所以这是我的设置。

Project contents

正如您所看到的,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调用),但显然它没有......

有什么想法吗?非常感谢你的时间!

1 个答案:

答案 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无关,这一切都是春天......