2011-06-28 99 views
2

我有這個測試夾具,我想與Fitnesse一起運行,它涉及到使用Spring。我一直無法使用ClasspathXmlApplicationContext加載Spring應用程序上下文,我確信它是一個類路徑配置,我只是沒有想到它。如何使用Fitnesse測試夾具加載Spring的應用程序上下文?

所以這是我的設置。

Project contents

正如你所看到的,fitnesse.jar是項目裏面,所以我可以運行FitNesse的服務器和測試,無論我有一個項目的工作副本(所有維基文件都在裏面了FitNesseRoot文件夾)。 bin是項目的輸出文件夾(其中所有.class都是)。

現在,代碼:

InventarioQueryTest(!從FitNesse的wiki頁面,注意路徑聲明)

!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(); 
    } 
} 

I用我項目的工作副本中的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 

由於FAS我明白了,路徑! ./bin在維基應該指出所有的子文件夾和東西要包括在classpath(java -cp調用)中,但顯然它不...

任何想法?非常感謝您的時間!

回答

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的搜索任何地方在classpath像我瞭解(讀這一點,ClassPathXML的一部分... ...:http://freejavaclass.com/articles/j2ee/spring/spring_loading_types_ways.jsp)。 至少不在春季2

它與Fitnesse無關,它全是彈簧...

相關問題