作为我的第一个项目的一部分,我正在创建一个小型库来向任何用户发送 SMS。如果第一次没有收到肯定状态,我已经添加了等待和重试的逻辑。这是对短信发送服务的基本 HTTP 调用。我的算法看起来像这样(评论将解释代码的流程):
for {
//send request
resp, err := HTTPClient.Do(req)
checkOK, checkSuccessUrl, checkErr := CheckSuccessStatus(resp, err)
//if successful don't continue
if !checkOK and checkErr != nil {
err = checkErr
return resp, SUCCESS, int8(RetryMax-remain+1), err
}
remain := remain - 1
if remain == 0 {
break
}
//calculate wait time
wait := Backoff(RetryWaitMin, RetryWaitMax, RetryMax-remain, resp)
//wait for time calculated in backoff above
time.Sleep(wait)
//check the status of last call, if unsuccessful then continue the loop
if checkSuccessUrl != "" {
req, err := GetNotificationStatusCheckRequest(checkSuccessUrl)
resp, err := HTTPClient.Do(req)
checkOK, _, checkErr = CheckSuccessStatusBeforeRetry(resp, err)
if !checkOK {
if checkErr != nil {
err = checkErr
}
return resp,SUCCESS, int8(RetryMax-remain), err
}
}
}
现在我想使用任何可用的 HTTP 模拟框架来测试这个逻辑。我得到的最好的是https://github.com/jarcoal/httpmock
但是这个不提供分别模拟第一个和第二个 URL 响应的功能。因此,我无法在第二次或第三次重试中测试成功。我可以先测试成功,也可以完全失败。
是否有适合我测试此特定功能的需求的软件包?如果不是,我如何使用当前工具实现这一目标?