我有功能从KeyCloak获取以下详细信息。
1.用户详细信息
1.领域详细信息
1.客户端详细信息
我想使用Mockito为这些功能编写测试用例。
下面是用于获取这些详细信息代码逻辑
@Autowired
private Keycloak keycloak;
@Value("${keycloak.realm}")
private String realm;
public Optional<UserModel> getUsers(String userId) {
UserResource userResource = keycloak.realm(realm).users().get(userId);
if (userResource == null)
return Optional.empty();
UserRepresentation userRepresentation = userResource.toRepresentation();
UserModel userModel = new UserModel(userRepresentation.getId(), userRepresentation.getFirstName(),
userRepresentation.getLastName(),
userRepresentation.getUsername(),
userRepresentation.getEmail(), userRepresentation.isEnabled(),
new Date(userRepresentation.getCreatedTimestamp()),
new Date(userRepresentation.getCreatedTimestamp()),
userRepresentation.getGroups(),
userRepresentation.getRealmRoles());
return Optional.of(userModel);
}
public Optional<RealmModel> getRealm(String realmId) {
RealmResource realmResource = keycloak.realms().realm(realmId);
if(realmResource == null)
return Optional.empty();
RealmRepresentation realmRepresentation = realmResource.toRepresentation();
RealmModel realmModel = new RealmModel(realmRepresentation.getId(), realmRepresentation.getDisplayName());
return Optional.of(realmModel);
}
public Optional<ClientModel> getClient(String clientId) {
ClientResource clientResource = keycloak.realm(realm).clients().get(clientId);
if(clientResource == null)
return Optional.empty();
ClientRepresentation clientRepresentation = clientResource.toRepresentation();
ClientModel clientModel = new ClientModel(clientRepresentation.getClientId(), clientRepresentation.getName()) ;
return Optional.of(clientModel);
}
我想在测试用例中模拟KeyCloak方法,
例如,
1. UserResource userResource = keycloak.realm(realm).users().get(userId);
2. UserRepresentation userRepresentation = userResource.toRepresentation();
我想嘲笑一些像下面这样的东西
Mockito.when(keycloak.realm(Mockito.anyString()).users().get(Mockito.anyString())).thenReturn(userResource);
我不知道是否有任何选项可用,请帮助我解决这个问题.谢谢
1条答案
按热度按时间cidc1ykv1#
首先,您需要有一个构造函数来接收自动连接的对象和值,而不是在字段上添加这些注解(这也是一个best practice):
然后,您需要在测试函数中的bean上传递一个模拟的Keycloak对象:
所以你可以执行
Mockito.when
函数,但是要注意你需要模拟keycloak.realms().realm(realmId)
中的每个函数调用,使用Mockito.when
链接函数是行不通的。