如何模拟外部库的对象?
How to mock objects of external libraries?
我想测试以下方法:
public String createUser(Keycloak keycloak) {
final Response response = keycloak.realm(this.realm).users().create(this.toUserRepresentation());
String userId = response.getLocation().getPath().replaceAll(".*/([^/]+)$", "");
return userId;
}
我试过这个但是 getPath() 总是 return 一个空字符串。
@PrepareForTest(URI.class)
@RunWith(PowerMockRunner.class)
class UserTest {
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
private Keycloak keycloak;
@Mock
private Response response;
@Test
public void createUserTest() throws Exception {
URI uri = PowerMockito.mock(URI.class);
when(uri.getPath()).thenReturn("https://myserver/myid[\r][\n]");
when(response.getLocation()).thenReturn(uri);
when(keycloak.realm(any()).users().create(any())).thenReturn(response);
assertEquals("myid", user.createUser(keycloak));
}
}
我应该如何模拟调用的 URI.getPath() 以使其 return 成为预期值?
您可能需要在@PrepareForTest 注释中包含待测试的 class。例如:
@PrepareForTest({URI.class, User.class})
然后 uri.getPath() 将 return 一个非空值。
请注意,您的测试 URI 永远不会评估为 "myid",它还将包括“[\r][\n]”。
("https://myserver/myid[\r][\n]").replaceAll(".*/([^/]+)$", "")
我想测试以下方法:
public String createUser(Keycloak keycloak) {
final Response response = keycloak.realm(this.realm).users().create(this.toUserRepresentation());
String userId = response.getLocation().getPath().replaceAll(".*/([^/]+)$", "");
return userId;
}
我试过这个但是 getPath() 总是 return 一个空字符串。
@PrepareForTest(URI.class)
@RunWith(PowerMockRunner.class)
class UserTest {
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
private Keycloak keycloak;
@Mock
private Response response;
@Test
public void createUserTest() throws Exception {
URI uri = PowerMockito.mock(URI.class);
when(uri.getPath()).thenReturn("https://myserver/myid[\r][\n]");
when(response.getLocation()).thenReturn(uri);
when(keycloak.realm(any()).users().create(any())).thenReturn(response);
assertEquals("myid", user.createUser(keycloak));
}
}
我应该如何模拟调用的 URI.getPath() 以使其 return 成为预期值?
您可能需要在@PrepareForTest 注释中包含待测试的 class。例如:
@PrepareForTest({URI.class, User.class})
然后 uri.getPath() 将 return 一个非空值。
请注意,您的测试 URI 永远不会评估为 "myid",它还将包括“[\r][\n]”。
("https://myserver/myid[\r][\n]").replaceAll(".*/([^/]+)$", "")