https://github.com/asarkar/grpc-test
Includes a JUnit 5 Extension that can automatically release gRPC resources at the end of the test
https://github.com/asarkar/grpc-test
grpc grpc-java grpc-test junit junit-extension junit5 junit5-extension protobuf protobuf-java testing
Last synced: 7 months ago
JSON representation
Includes a JUnit 5 Extension that can automatically release gRPC resources at the end of the test
- Host: GitHub
- URL: https://github.com/asarkar/grpc-test
- Owner: asarkar
- License: apache-2.0
- Created: 2020-08-02T23:32:43.000Z (over 5 years ago)
- Default Branch: main
- Last Pushed: 2025-05-13T07:28:42.000Z (10 months ago)
- Last Synced: 2025-05-13T08:37:12.004Z (10 months ago)
- Topics: grpc, grpc-java, grpc-test, junit, junit-extension, junit5, junit5-extension, protobuf, protobuf-java, testing
- Language: Kotlin
- Homepage:
- Size: 152 KB
- Stars: 28
- Watchers: 4
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# grpc-test
Includes a JUnit 5 [Extension](https://junit.org/junit5/docs/current/api/org.junit.jupiter.api/org/junit/jupiter/api/extension/Extension.html)
that can automatically release gRPC resources at the end of the test.
Like [GrpcCleanupRule](https://grpc.github.io/grpc-java/javadoc/io/grpc/testing/GrpcCleanupRule.html), but built for
JUnit 5 and actively maintained.
[](https://github.com/sponsors/asarkar)
[![CI]()](https://github.com/asarkar/grpc-test/actions?query=workflow%3A%22CI%22)
[](https://central.sonatype.com/artifact/com.asarkar.grpc/grpc-test?smo=true)
[](https://javadoc.io/doc/com.asarkar.grpc/grpc-test)
[](https://www.apache.org/licenses/LICENSE-2.0)
[](https://github.com/asarkar/.github/blob/main/CODE_OF_CONDUCT.md)
[](https://github.com/asarkar/grpc-test/blob/main/.java-version)
## Usage
Declare a `Resources` in one of the three following ways, and register `Server` and/or `ManagedChannel` instances with
it.
Get a `Resources` from:
1. A test method parameter injection, or
2. An instance field, or
3. A static field.
The difference is in the lifecycle of the `Resources` object. For `#1`, a new instance is created for every test method.
`#2` is the same as `#1` unless the test class declares `@TestInstance(TestInstance.Lifecycle.PER_CLASS)`, in which case
one instance is shared among all the tests. `#3` is obviously one instance shared among all the tests.
```
@ExtendWith(GrpcCleanupExtension.class)
class ExampleTestCase {
@Test
void testSuccessful(Resources resources) {
resources.register(server); // use default timeout
resources.register(channel, Duration.ofSeconds(1)); // override default timeout
resources.timeout(Duration.ofSeconds(3)); // change default timeout to 3 seconds
resources.register(channel2) // channel2 timeout is 3 seconds; server and channel timeouts didn't change
}
}
```
:information_source: Note that for `#2` and `#3`, if the variable is already been assigned a value by the user, the
extension will not reinitialize it.
:information_source: If you're writing `@Nested` tests, see [issues/8](https://github.com/asarkar/grpc-test/issues/8).
The test class in [client](client/src/test) project uses the `GrpcCleanupExtension` from Java code.