Spring Boot集成测试错误:在不需要Wiremock的测试中,“无法解析占位符'wiremock.server.port'”

时间:2019-10-22 16:31:30

标签: java spring-boot spring-boot-test wiremock

我有一个@SpringBootTest,它测试@ConfigurationProperties的加载及其方法。它位于test源集中。

然后,在itest中,我进行了一个集成测试,该测试使用Wiremock(发送请求并使用存根作为响应等)

现在,当我运行gradle test时,第一个测试失败,并说:

  

[ENV = local] [productName = app-gateway-api] [2019-10-22T16:18:30.994Z] [ERROR] [MSG = [Test worker] osboot.SpringApplication-应用程序运行失败org.springframework .beans.factory.UnsatisfiedDependencyException:创建文件[E:\ coding \ code \ app \ build \ classes \ java \ main \ com \ app \ controller \ MyController> .class]中定义的名称为'myController'的bean时出错。通过构造函数表示   参数0;嵌套异常为   org.springframework.beans.factory.BeanCreationException:错误   创建名称为“ proxyService”的bean:自动接线的注入   依赖失败;嵌套异常为   java.lang.IllegalArgumentException:无法解析占位符   价值'wiremock.server.port'   “ http://localhost:$ {wiremock.server.port} /发送”

在某些外部属性中使用。该值将在itest中使用,但不会在test中使用。但是上下文始终会加载它。

在其他使用它的项目中,没有问题。但是,似乎它正在加载所有类,并且找不到Wiremock并创建服务器。

问题测试:

@SpringBootTest
public class MapperLookupTest {
    ...
}

Wiremock依赖项已经具有compile范围:

    compile('com.github.tomakehurst:wiremock-jre8-standalone:2.21.0')
    compile("org.springframework.cloud:spring-cloud-starter-contract-stub-runner")

我尝试仅使用@SpringBootTest(classes = {...})加载必要的类,但这太冗长了。

那么,有什么简单的方法告诉上下文加载Wiremock?

2 个答案:

答案 0 :(得分:1)

只需将默认值添加到您的占位符:

${wiremock.server.port:defaultValue}

答案 1 :(得分:0)

最后,我决定不尊重@Cwrwhaf,对不起..因为我不想对生产代码产生负面影响;我只想通过测试,任何更改都应仅限于测试本身的范围。

我做到了:

import pandas as pd

df = pd.DataFrame({'Age': [30, 40, 30, 40, 30, 30, 20, 25],
                   'Height': [120, 162, 120, 120, 120, 72, 120, 81]},
                  index=['Jane', 'Jane', 'Aaron', 'Penelope', 'Jaane', 'Nicky',
                         'Armour', 'Ponting'])
line = pd.DataFrame({"Age": 33, "Height": 130}, index=[2])
df2 = pd.concat([df.iloc[:2], line, df.iloc[2:]]).reset_index(drop=True)
df2

我知道,这不是一个完美的答案,但与更改Wiremock的全局设置相比,其影响较小。