【问题标题】:How to load Spring's application context with a Fitnesse test fixture?如何使用 Fitnesse 测试夹具加载 Spring 的应用程序上下文?
【发布时间】:2011-07-01 03:13:37
【问题描述】:

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

这是我的设置。

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

现在,代码:

InventarioQueryTest(来自 Fitnesse 的 wiki 页面,注意 !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 调用),但显然它不会……

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

【问题讨论】:

    标签: java spring automated-tests fitnesse


    【解决方案1】:

    好的,我在 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 像我理解的那样在类路径中搜索 anywhere(阅读此内容,ClassPathXML 的部分...:http://freejavaclass.com/articles/j2ee/spring/spring_loading_types_ways.jsp)。 至少在 Spring 2 中不会

    这和 Fitnesse 无关,都是春天……

    【讨论】:

      猜你喜欢
      • 2021-06-23
      • 1970-01-01
      • 2013-02-03
      • 2018-07-11
      • 1970-01-01
      • 2015-04-27
      • 2016-10-31
      • 2012-10-28
      相关资源
      最近更新 更多