Заглушка с помощью Wiremock — расположение WithBodyFile, отличное от _files

В документации Wiremock указано, что расположение файла, указанного в withBodyFile, должно находиться в src/test/resources/__files. Я хотел бы иметь файл в src/test/resources/Testing_ABC/Testcase2/myfile.xml.

Есть ли способ добиться этого? Я пробовал следующее, но, похоже, это не работает!

stubFor(get(urlPathEqualTo("/abc")).willReturn
                (aResponse().withHeader("Content-Type",
                        "text/xml; charset=utf-8").withHeader
                        ("Content-Encoding",
                                "gzip")
                        .withBodyFile
                                ("src/test/resources/Testing_ABC/Testcase2/myfile.xml)));

Однако, когда я помещаю свой файл в src/test/resources/__files/myfile.xml и соответствующим образом меняю путь, он работает нормально.

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


person Ragini    schedule 11.01.2018    source источник
comment
Согласно wiremock.org/docs/configuration, вы должны иметь возможность изменить расположение ресурсов. Имейте в виду, что это изменяет расположение всех файлов в каталоге resources.   -  person GuyT    schedule 11.01.2018
comment
По какой причине вы хотите иметь другое место?   -  person A. Kootstra    schedule 27.08.2018
comment
@A.Kootstra - Почему ты спрашиваешь?   -  person MasterJoe    schedule 11.09.2020
comment
Потому что эта причина может быть решена другим способом, на что следует обратить внимание, учитывая, что это жестко запрограммировано в программном обеспечении.   -  person A. Kootstra    schedule 12.09.2020


Ответы (3)


Я использую этот класс Kotlin Config для настройки корневого каталога. Он по-прежнему требует, чтобы файл ответов находился в каталоге __files.

@Configuration
class Config: WireMockConfigurationCustomizer {
    override fun customize(config: WireMockConfiguration?) {
        config!!.withRootDirectory("customer-client/src/test/resources")
    }
}

@AutoConfigureWireMock
person Arthur Kazemi    schedule 27.08.2018

Для Java и Spock, но по-прежнему используется папка __files

@TestConfiguration
public class WireMockConfig {

    @Bean
    public WireMockConfigurationCustomizer wireMockConfigurationCustomizer() {
        return config -> {
            config.withRootDirectory("src/integration-test/resources");
        };
    }
}

Затем, где бы вы ни находились, инициализатор ApplicationContext:

@SpringBootTest(classes = [Application.class, WireMockConfig.class], webEnvironment = RANDOM_PORT)
@ContextConfiguration()
abstract class WireMockIntegrationSpec extends Specification {
}

Затем в вашем тесте:

@AutoConfigureWireMock(port = 9089)
@Unroll
class ApplicationSpec extends WireMockIntegrationSpec {

    def "Some test" () {
    }
}

Ваши ресурсы будут обслуживаться с src/integration-test/resources/__files. Убедитесь, что эта структура каталогов существует

person Piotr Dajlido    schedule 14.10.2020

Кажется, это то, что вам нужно настроить при создании правила. Пытаться

@Rule
public final WireMockRule rule = new WireMockRule(WireMockConfiguration.wireMockConfig()
  .withRootDirectory("src/test/resources/Testing_ABC"));

и тогда вы, вероятно, можете использовать .withBodyFile("Testcase2/myfile.xml) в тесте.

person Henri Viik    schedule 11.01.2018
comment
Спасибо за ваш ответ Анри. Я попробовал то, что вы предложили. Но похоже, что wiremock ищет файлы в src/test/resources/Testing_ABC/__files/Testcase2/myfile.xml. Таким образом, он каким-то образом ожидает каталог __files, чего я хотел бы избежать. - person Ragini; 11.01.2018