Как загрузить контекст приложения Spring с помощью тестового прибора Fitnesse? - PullRequest
2 голосов
/ 29 июня 2011

У меня есть этот тестовый прибор, который я хочу использовать с Fitnesse, и он включает использование Spring.Я не смог загрузить контекст весеннего приложения с помощью ClasspathXmlApplicationContext, и я уверен, что это конфигурация пути к классам, которую я просто не понял.

Итак, вот мои настройки.

Project contents

Как видите, файл fitnesse.jar находится внутри проекта, поэтому я могу запускать сервер fitnesse и тесты везде, где у меня есть рабочая копия проекта (все файлы вики)находятся в папке 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:

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

Насколько я понимаю,! Path ../bin в вики должен указывать все подпапки и вещи, которые должны быть включены в classpath (вызов java -cp), но, видимо, это не так ...

Есть идеи?Большое спасибо за ваше время!

1 Ответ

2 голосов
/ 30 июня 2011

Хорошо, поэтому я решил это, выполнив это в классе 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 .

Это не имело никакого отношения к Фитнесу, это была вся Весна ...

...