在为使用 RestTemplate(和引擎盖下的功能区)和 Eureka 解析服务 B 依赖项的Spring启动应用程序(服务 A)编写集成测试时,我在调用服务 A 时收到“没有可用的实例”异常。
我试图通过WireMock模拟服务B,但我甚至无法访问WireMock服务器。看起来RestTemplate试图从Eureka获取服务实例,但在我的测试中没有运行。它通过属性禁用。
服务 A 呼叫服务 B.服务发现通过 RestTemplate、功能区和尤里卡完成。
有人有包括Spring、Eureka和WireMock的工作示例吗?
希望这能帮助一些人。我在Ribbon上也犯了同样的错误,但没有Eureka。
帮助我的是
1) 在我的例子中,升级到WireMock(2.21)的最新版本
2)为URL“/”添加wiremock规则存根,以回答Ribbon的ping
这是我在我的项目中所做的:
在项目配置中的某个位置:
@LoadBalanced
@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder) {
RestTemplate restTemplate = builder.build();
restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
return restTemplate;
}
@Bean
public SomeRestClass someRestClass () {
SomeRestClass someRestClass = new SomeRestClass (environment.getProperty("someservice.uri"), restTemplate(new RestTemplateBuilder()));
return parameterRest;
}
和SomeRestClass:
public class SomeRestClass {
private final RestTemplate restTemplate;
private final String someServiceUri;
public LocationRest(String someServiceUri, RestTemplate restTemplate) {
this.someServiceUri= someServiceUri;
this.restTemplate = restTemplate;
}
public String getSomeServiceUri() {
return locationUri;
}
public SomeObject getSomeObjectViaRest() {
//making rest service call
}
}
以及<code>SomeRestClass
@RunWith(SpringRunner.class)
@RestClientTest(SomeRestClass.class)
public class SomeRestClassTest {
@Autowired
private SomeRestClass someRestClass;
@Autowired
private MockRestServiceServer server;
@Test
public void getSomeObjectViaRestTest() throws JsonProcessingException {
SomeResponseObject resObject = new SomeResponseObject();
ObjectMapper objectMapper = new ObjectMapper();
String responseString = objectMapper.writeValueAsString(resObject);
server.expect(requestTo(locationRest.getSomeServiceUri() + "/some-end-point?someParam=someParam")).andExpect(method(HttpMethod.POST))
.andRespond(withStatus(HttpStatus.OK).contentType(MediaType.APPLICATION_JSON_UTF8).body(responseString));
someRestClass.getSomeObjectViaRest();
}
}
注意:我分离了eureka客户端,因为否则您必须模拟eureka服务器。所以我添加了eureka.client。在test application.properties中enabled=false
我昨天遇到了同样的问题,为了完整起见,这里是我的解决方案:
这是我在< code>src/main/java/下的“实时”配置.../config:
//the regular configuration not active with test profile
@Configuration
@Profile("!test")
public class WebConfig {
@LoadBalanced
@Bean
RestTemplate restTemplate() {
//you can use your regular rest template here.
//This one adds a X-TRACE-ID header from the MDC to the call.
return TraceableRestTemplate.create();
}
}
我将此配置添加到测试文件夹 src/主/测试/java/.../配置
中:
//the test configuration
@Configuration
@Profile("test")
public class WebConfig {
@Bean
RestTemplate restTemplate() {
return TraceableRestTemplate.create();
}
}
在测试用例中,我激活了profiletest
:
//...
@ActiveProfiles("test")
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class ServerCallTest {
@Autowired
private IBusiness biz;
@Autowired
private RestTemplate restTemplate;
private ClientHttpRequestFactory originalClientHttpRequestFactory;
@Before
public void setUp() {
originalClientHttpRequestFactory = restTemplate.getRequestFactory();
}
@After
public void tearDown() {
restTemplate.setRequestFactory(originalClientHttpRequestFactory);
}
@Test
public void fetchAllEntries() throws BookListException {
MockRestServiceServer mockServer = MockRestServiceServer.createServer(restTemplate);
mockServer
.andExpect(method(HttpMethod.GET))
.andExpect(header("Accept", "application/json"))
.andExpect(requestTo(endsWith("/list/entries/")))
.andRespond(withSuccess("your-payload-here", MediaType.APPLICATION_JSON));
MyData data = biz.getData();
//do your asserts
}
}
我有几个繁重的Spring集成测试(是的,这不是最好的方法,我没有时间正确地模拟所有外部dep) 下面是测试的典型注释 由于以下原因,测试会定期失败: 这里有两个问题:1、让测试共存的正确方式是什么?我在surefire插件中设置了forkCount=0。好像有帮助 2.1. 在每次测试期间,我实际上不需要启动所有的
我有一个SpringBoot应用程序,它有一个控制器类、一个服务和一个存储库,运行得非常好。我已经为相同的应用程序添加了Junit测试用例,而且效果也非常好。 下面是测试类。 测试用例一直通过,但目前我正在添加另一个API,如下所示,所有测试都失败了。 下面是测试类。 添加部门服务后,测试用例失败,错误如下: 干杯!
与@mockbean和@spybean一样,有没有类似于@fakebean/@dummybean的东西? 其思想是,该实例是100%真实的(具有预期的生产内部状态),并且它覆盖(或者添加bean,以防在配置中没有声明)上下文中的bean。理想情况下,您不需要创建TestConfiguration类并将其设置为Primary,因为这样可以在每个测试的基础上控制假冒,只有在需要时才可以。否则它使用主的
我正在尝试如何在使用Eureka的Spring Boot应用程序上构建集成测试。说我有考试 我的代码路径中有该 api 调用: 这将NPE。发现客户端返回为空。如果我直接启动 Spring 启动应用程序并自己使用 API,代码工作正常。我在任何地方都没有特定的个人资料用法。我需要为发现客户端配置一些特殊的 wrt Eureka 以进行测试吗?
我对Spring靴还不熟悉。我使用Spring靴1.5.1 GA和Spring靴的Neo4j启动器。我试图创建我的第一个集成测试,以确定是否可以将新对象插入到图形数据库中。这是我的测试课: PeristentTestContext专门用于测试数据库操作。在这个类中,我设置了用于测试的嵌入式驱动程序: } 不幸的是,当我从STS IDE运行测试时,甚至在测试可以验证之前,我就收到了以下错误消息: 当