LINUX.ORG.RU

Groovy and Spring-test

 ,


0

2

Всем привет! Раньше мы тестировали все через Junit и писали что-то типа такого:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {
        SchemaConfgiuration.class
})
@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD)
public abstract class ApplicationTest {}
наследовались и инжектили бины.

Теперь решили посмотреть в сторону Spock - но возник вопрос - как контекст создавать?

@RunWith(SpringJUnit4ClassRunner.class)

Сейчас уже не прокатит. Никто не переводил свои тесты на Spock? Как я прочел - надо свой писать контекстлоадер, но неужели все так плохо?

Я склонен считать это первым предупреждением, что лучше в эту сторону не ходить. Spock хорош для юнит-тестов, а уж для чего-то более сложного я бы его использовать точно не стал.

Во-первых, из-за того что конфигурация не самая распространенная можно наступить на грабли, которых ни у кого больше нет.

Во-вторых, отчасти из-за этого же факта повышается порог вхождения в проект.

В-третьих, из-за динамичности Groovy можно поменять возвращаемое методом значение и ни один из тестов этого не заметит.

В-четвертых, тесты на Groovy кажется все-таки дольше исполняются, чем на Java.

В-пятых, поддержка самого Spock-а тоже вызывает вопросы. Закладываться в долгосрочной перспективе на подобный компонент может быть опасно.

В-шестых, в Java куда более развиты программы для статического анализа, в отличие от Groovy. (Банальный пример, есть ли для Groovy анализ на порядок импортов в файле?)

php-coder ★★★★★ ()

Решение:

В зависимости тащим вот такое:

    testCompile group: 'org.spockframework', name: 'spock-spring', version: '1.1-groovy-2.4'
    testCompile "org.springframework:spring-test:$vers.spring"

После чего уже создаем тестовый класс как:

@ContextConfiguration(classes = TestConfiguration)
@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD)
class DbLoadSpec extends Specification {}

aarexer ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.