Тестирование гобеленовых страниц и компонентов с помощью JUnit - PullRequest
5 голосов
/ 27 августа 2010

Я обычно стараюсь минимизировать тестирование с помощью Selenium и максимально использовать простое старое внутреннее тестирование (JUnit, mocking).С Tapestry мне сложно тестировать страницы и компоненты последним способом из-за "магии", возникающей с функциями обратного вызова.

Вам удалось решить эту проблему?Или вы просто используете Selenium для всего веб-слоя (страниц, компонентов)?

Ответы [ 2 ]

3 голосов
/ 27 августа 2010

Согласно документации Tapestry, использование PageTester является подходящим способом для модульного тестирования страниц и компонентов: http://tapestry.apache.org/tapestry5/guide/unit-testing-pages.html

Но это похоже на веб-тестирование в стиле HtmlUnit, поскольку взаимодействие происходит через веб-браузер, такой какинтерфейс, а не через интерфейс страницы или компонента.

Редактировать

Я только что попробовал простой модульный тест для страниц, и он работает довольно хорошо:

public class FooPageTest extends AbstractServiceTest{

    @Autobuild
    @Inject
    private FooPage fooPage;

    @Test
    public void setupRender(){
        fooPage.setupRender();
    }

}

AbstractServiceTest предоставляет средство запуска тестов, которое обеспечивает внедрение зависимостей Tapestry в класс модульных тестов.С Autobuild вы получаете удовлетворение зависимостей @Inject FooPage, а для инъекций компонентов и аннотированных элементов @Property вам нужно будет найти что-то еще.

0 голосов
/ 02 сентября 2017

Просто, чтобы конкретизировать предложение Тимо:

public class AbstractServiceTest
{
    @Before
    public void before() throws IllegalAccessException {
        // startupRegistry();
        injectServices();
    }

    private void injectServices() throws IllegalAccessException {
        for(Field field : getClass().getDeclaredFields()) {
            field.setAccessible(true);

            if(field.isAnnotationPresent(Inject.class)) 
                field.set(this, registry.getService(field.getType()));

            if(field.isAnnotationPresent(Autobuild.class))
                field.set(this, registry.autobuild(field.getType()));
        }
    }
}

В ваших тестах будут правильно введены поля.Помните, вы @Inject Services (интерфейсы) и вы @Autobuild реализации (классы)

...