gpt4 book ai didi

java - 使用 Mockito/EasyMock 模拟 Autowiring 的 Web 服务

转载 作者:行者123 更新时间:2023-11-30 09:21:54 25 4
gpt4 key购买 nike

我有一个类如下:

@Component
public class UserAuthentication {

@Autowired
private AuthenticationWebService authenticationWebservice;

public boolean authenticate(username, password) {

result = authenticationWebService.authenticateUser(username, password)

//do
//some
//logical
//things
//here

return result;
}
}

我正在编写一个单元测试来查看函数是否正确运行。当然,现在我不应该进行实际的网络服务调用。那么我怎样才能以这样一种方式模拟 web 服务,即当我调用我的类的 authenticate 方法时,使用模拟的 web 服务对象而不是真实的对象。

最佳答案

使用 Mockito,您可以像这样 stub 外部服务:

'when(mockedAuthenticationWebService.authenticate(username, password).thenReturn(yourStubbedReturnValue);'

我是凭内存写的,如果不能立即编译,请原谅;你会明白的。

在这里,我还使用 Mockito、hamcrest 和 JUnit 4 验证是否使用正确的参数调用了服务,您的测试也需要涵盖这些参数:)

@Test
public class UserAuthenticationTest {
// Given
UserAuthentication userAuthentication = new UserAuthentication();
AuthenticationWebService mockedAuthenticationWebService = mock(AuthenticationWebService.class)

String username = "aUsername" , password = "aPassword";
when(mockedAuthenticationWebService.authenticate(username, password).thenReturn(true); // but you could return false here too if your test needed it

userAuthentication.set(mockedAuthenticationWebService);

// When
boolean yourStubbedReturnValue = userAuthentication.authenticate(username, password);

//Then
verify(mockedAuthenticationWebService).authenticateUser(username, password);
assertThat(yourStubbedReturnValue, is(true));
}

最后,您的类(class)是 @Autowired 的事实对这一切没有任何影响。

关于java - 使用 Mockito/EasyMock 模拟 Autowiring 的 Web 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16734959/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com