apache / apache/grails-core

Inject Micronaut Http client at integrationstests

未关闭
#11,368 3 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看
relates-to: micronaut
主要语言
Groovy
星标
2.9k
派生
975
平均合并
1 天 22 小时
30 天内合并 PR
92

描述

Thanks for reporting an issue for Grails framework, please review the task list below before submitting the
issue. Your issue report will be closed if the issue is incomplete and the below tasks not completed.

NOTE: If you are unsure about something and the issue is more of a question a better place to ask questions is on Stack Overflow (http://stackoverflow.com/tags/grails) or Slack (http://slack-signup.grails.org). DO NOT use the issue tracker to ask questions.

### Task List

- [x] Steps to reproduce provided
- [n/a] Stacktrace (if present) provided
- [n/a] Example that reproduces the problem uploaded to Github
- [x] Full description of the issue provided (see below)

### Steps to Reproduce
When doing automatic integration testing in Micronaut, I can inject the embedded httpServer without specifying host nor port. This is very convenient as the port is randomised by default in tests.

Here is an example Spock testcase from Micronaut, where I have a HelloController that returns "Hello World":
```
@Inject
@Client('/') // <-- no need to specify port nor host
RxHttpClient client

void "call app"() {
when:
String reply = client.toBlocking().retrieve('/hello')

then:
reply == 'Hello World'
}
```

With Micronaut HTTP client being introduced in Grails 4.0, it would be very nice if we could avoid having to specify the hostname and port for Micronaut HTTP client in Grails integrationtests as well.

Right now I am doing this to get the Micronaut HTTP client in my integrationtests in Grails:
```
@LocalServerPort
Integer localServerPort // random port in tests

BlockingHttpClient httpClient

def setup() {
httpClient = httpClient ?: HttpClient.create(new URL("http://localhost:${localServerPort}")).toBlocking()
}
```

It would be very nice if I could do like in Micronaut:
```
@Inject
@Client('/') // <-- no need to specify port nor host
RxHttpClient client
```
### Expected Behaviour
the http client should be injected without needing to specify port and host

### Actual Behaviour
the http client does not get injected

### Environment Information

- **Operating System**: Ubuntu 18.04
- **Grails Version:** 4.0.0
- **JDK Version:** 8u212
- **Container Version (If Applicable):** N/A

### Example Application

- N/A - it is a feature request

贡献指南

打开贡献指南

调研方向

首先定位 issue 中描述的 Grails 集成测试设置以及 Micronaut 的 @Inject/@Client wiring。检查嵌入式服务器的随机端口是如何暴露的,然后验证在集成测试中无需指定主机或端口即可注入 HTTP 客户端。

由索引模型根据 Issue 内容生成。

评估

技术栈
groovy
领域
backend, testing
Issue 类型
功能
难度
4/5
预计耗时
3-5 天
活跃度
停滞
描述清晰度
基本清楚
新手友好度
35/100

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。