我正在尝试模拟对驻留在if
语句中的外部api的函数调用。我无法返回在.thenReturn
中拥有的值,并且不确定为什么。我一直在寻找有关此问题的答案,但似乎找不到任何能回答我问题的答案。感谢您的宝贵时间!
这是我正在测试的班级:
@Service
public class TwilioVerifyService {
public String requestCode(String phoneNumber, String countryCode, String via) throws AuthyException
{
AuthyApiClient authyApiClient = new AuthyApiClient("<apiClient>");
Params params = new Params();
params.setAttribute("code_length", "6");
Verification verification = authyApiClient
.getPhoneVerification()
.start(phoneNumber, countryCode, via, params);
if (verification.isOk())
{
return "{ \"success\": \"Successfully sent verification code.\" }";
}
return "{ \"error\": \"Error sending code.\" }";
}
}
这是我的测试:
@RunWith(MockitoJUnitRunner.class)
public class TwilioVerifyServiceTests {
@InjectMocks
TwilioVerifyService twilioVerifyService;
@Mock
Verification verification;
@Test
public void requestCodeTest_success() throws AuthyException
{
String phoneNumber = "1111111111";
String countryCode = "1";
String via = "1";
when(verification.isOk()).thenReturn(true);
String result = twilioVerifyService.requestCode(phoneNumber, countryCode, via);
System.out.println(result);
}
}
我相信我正在(或想成为)嘲笑verification.isOk()
返回true而不考虑输入,但是提供"{ "error": "Error sending code." }"
而不是"{ \"success\": \"Successfully sent verification code.\" }"
似乎返回false。 / p>
再次感谢您的时间!
答案 0 :(得分:0)
验证是通过对AuthyApiClient中的方法的调用生成的。
理想情况下,不应在您的服务中实例化AuthyApiClient,而应由调用者将其注入其中。
private AuthyApiClient authyApiClient;
@Autowired
public TwilioVerifyService(AuthyApiClient authyApiClient) {
this.authyApiClient = authyApiClient;
}
然后,您可以模拟authyApiClient并将其传递给要测试的类: TwilioVerifyService twilioVerifyService =新的TwilioVerifyService(mockAuthyApiClient);
这使您可以更好地控制要测试的类,并删除当前对AuthyApiClient构造函数的依赖。