Спок тестовый фреймворк - как параметризовать ресурс @Rule? - PullRequest
0 голосов
/ 30 августа 2018

Я обновляю тесты Спока. Есть несколько пародий и ресурс @Rule:

AuthTokenService mockAuthTokenService = Mock()
ObjectMapper mockObjectMapper = Mock()

GeneralConfiguration conf = Mock();
def CLA_BASE_URL = "http://some-prefix/";

@Rule
ResourceTestRule resource = ResourceTestRule.builder()
    .addResource(new AuthResourceImpl(mockAuthTokenService, mockObjectMapper, conf))
    .build()

Мне нужно, чтобы ресурс имел разные conf для двух разных тестов. Поэтому я попытался

def 'create auth token with configured URL prefix'() {
    setup:
    AuthTokenMetaData authTokenMetaData = buildAuthTokenMetaData()

    when:
    conf.getClaBaseUrl() >> CLA_BASE_URL
    ...

Но это не сработало, потому что resource создается один раз. Поэтому мне пришлось добавить еще один ресурс.

GeneralConfiguration conf2 = new GeneralConfiguration().setClaBaseUrl(CLA_BASE_URL);
@Rule
ResourceTestRule resource2 = ResourceTestRule.builder()
        .addResource(new AuthResourceImpl(mockAuthTokenService, mockObjectMapper, conf2))
        .build()

Но это звучит немного странно, и после короткой встречи со Споком я думаю, что у нее есть лучший подход к этому.

Как я могу параметризовать ResourceTestRule?

Это должно быть правило JUnit из-за базовой реализации ResourceTestRule.

Ответы [ 2 ]

0 голосов
/ 03 сентября 2018

Как уже упоминал Леонард, Спок - это просто JUnit, он поддерживает механизм @Rule в том же смысле, что и JUnit, так как для этого нет специального синтаксиса.

Так что, если вам нужны две разные конфигурации, вам, вероятно, следует использовать два разных определения правил и в зависимости от "заводной" сложности теста найти решение, которое подходит вам лучше всего:

Вот один пример:

class FirstConfigurationSpecification extends Specification {
   @Rule // config A
}

class SecondConfigurationSpecification extends Specification {
   @Rule // config B
}

// in tests
class MyTestThatRequiresConfigurationA extends FirstConfigurationSpecification {}

// in tests
class MyTestThatRequiresConfigurationB extends SecondConfigurationSpecification {}
0 голосов
/ 01 сентября 2018

Спок не предоставляет никакого механизма для параметризации @Rule, так как правило создается до того, как выполняются управляемые данными функции.

...