mirror of
https://github.com/keycloak/keycloak.git
synced 2026-01-10 15:32:05 -03:30
78 lines
3.3 KiB
Markdown
78 lines
3.3 KiB
Markdown
### Basics
|
|
|
|
Check the [MIGRATING_TESTS guide](./MIGRATING_TESTS.md) first if you have not already done so.
|
|
|
|
When migrating tests use the remote server mode as this will make it much quicker to run tests than having to start/stop
|
|
Keycloak when you run the test from the IDE.
|
|
|
|
Add `@KeycloakIntegrationTest` to the class.
|
|
|
|
Change `import org.junit.Test;` to `import org.junit.jupiter.api.Test;`
|
|
|
|
Change `org.junit.Before` to `org.junit.jupiter.api.BeforeEach`
|
|
|
|
Remove extends `AbstractKeycloakTest` as the new test framework provides injection of resources needed by the test there
|
|
is no need for the `AbstractKeycloakTest` and tests should instead inject what they need.
|
|
|
|
One thing your test is most likely going to need is a realm, this is now done with:
|
|
|
|
```
|
|
@InjectRealm
|
|
ManagedRealm realm;
|
|
```
|
|
|
|
With this change, most of the time you do not need to get the `RealmResource` via an admin client. Instead, you can use
|
|
`realm.admin()`
|
|
|
|
### Changed packages/classes
|
|
|
|
| Old | New |
|
|
|---------------------------------------------|-----------------------------------------------------------------------------------------|
|
|
| org.junit.Assert | org.junit.jupiter.api.Assertions |
|
|
| org.keycloak.testsuite.Assert | org.keycloak.tests.utils.Assert |
|
|
| org.junit.Test | org.junit.jupiter.api.Test |
|
|
| org.keycloak.testsuite.admin.ApiUtil | org.keycloak.testframework.util.ApiUtil and org.keycloak.tests.utils.admin.AdminApiUtil |
|
|
| org.keycloak.testsuite.util.AdminEventPaths | org.keycloak.tests.utils.admin.AdminEventPaths |
|
|
|
|
### Assertions
|
|
|
|
Change `import org.junit.Assert;` to `import org.junit.jupiter.api.Assertions;`, and replace `Assert.` with `Assertions.` throughout.
|
|
|
|
If the assert passes a message (for example `Assert.assertEquals("Message", expected, actual)`) the message in `Assertions`
|
|
is now the last parameter (for example `Assertions.assertEquals(expected, actual, "Message")`).
|
|
|
|
### Admin events
|
|
|
|
Admin events are handled slightly differently in the new test framework.
|
|
|
|
An example for the old testsuite:
|
|
|
|
```
|
|
@Rule
|
|
public AssertAdminEvents assertAdminEvents = new AssertAdminEvents(this);
|
|
|
|
public void myTest() {
|
|
assertAdminEvents.assertEvent(realmId, OperationType.CREATE, ...);
|
|
}
|
|
```
|
|
|
|
Converted to the new test framework:
|
|
|
|
```
|
|
@InjectAdminEvents
|
|
public AdminEvents adminEvents;
|
|
|
|
public void myTest() {
|
|
AdminEventAssertion.assertEvent(adminEvents.poll(), OperationType.CREATE, ...);
|
|
}
|
|
```
|
|
|
|
Notice that there is no need to pass `realmId` when asserting an event, that is because the `AdminEvents` will only
|
|
receive events for the current realm.
|
|
|
|
For better readability `AdminEventAssertion` provides a method chaining approach to assert various fields in the event
|
|
(the example above could be change to `AdminEventAssertion.assertSuccess(adminEvents.poll()).operationType(OperationType.CREATE)...`).
|
|
|
|
There is also improved support for skipping events using skip methods, that allows skipping one event (`.skip()`),
|
|
multiple events (`.skip(5)`), or skipping all previous events (`.skipAll()`).
|