0

以下は、API 呼び出しを行うコードであり、API 呼び出しから正常に結果が得られます (Satus:200)。同じシナリオに Unite テスト ケースを追加したかったのですが、Unite テスト ケースから API 呼び出しが失敗しhttpWebRequest.GetRequestStream()、コード内の ( ) 呼び出しに到達すると 503 サーバーが利用できないか、タイムアウトが返されることがわかりました。しかし、同じ API 呼び出しが私のメイン アプリケーションで N + 回成功として正常に動作します。以下はコードです。

public string FetchToken()
{
    string output = string.Empty;
    var method = MethodBase.GetCurrentMethod();
    var cep = ConfigurationManager.AppSettings["TokenAPI"].ToString();
    var suser = ConfigurationManager.AppSettings["usr"].ToString();
    var httpWebRequest = (HttpWebRequest)WebRequest.Create(Path.Combine(cep, suser));
    httpWebRequest.Headers.Add("X-nSpace", ConfigurationManager.AppSettings["nSpace"].ToString());
    httpWebRequest.ContentType = "application/json";
    httpWebRequest.KeepAlive = true;
    httpWebRequest.Accept = "*/*";
    httpWebRequest.Host = ConfigurationManager.AppSettings["HostKey"].ToString();
    httpWebRequest.Method = "POST";
    string json = string.Empty;
    try
    {
        using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
        {
            var cDtls = new Dictionary<string, string>();
            var cK = ConfigurationManager.AppSettings["cKey"].ToString();
            var cId = ConfigurationManager.AppSettings["cID"].ToString();
            cDtls.Add(cK, cId);
            json = JsonConvert.SerializeObject(cDtls);
            streamWriter.Write(json);
            streamWriter.Flush();
            streamWriter.Close();
        }
        var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
        using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
        {
            var parse = JObject.Parse(streamReader.ReadToEnd());
            var authObject = parse["attr"];
            output = authObject["ct_k"].ToString();
        }
    }
    catch (Exception ex)
    {
        output = string.Empty;
    }
    return output;
} 

My Unit テスト ケース メソッド

[TestMethod]
public void FetchToken_Pass_Test()
{
    using (ShimsContext.Create())
    {
        IFetchService service = new FetchService();

        var fetchInput = new FetchInputPC();
        var fetchService = new FetchServicePC();
        fetchInput.FetchInput = "3af5fd9c309f47d489895a8b352fca9d987";
        var fetchOutput = fetchService.FetchToken(fetchInput);

        Assert.AreEqual(fetchOutput.FetchValue, "ivK%2FngulI%2BzImce9R7%2BbaptVBX82fg%2FHaWoPke3%2Bp03Yw6hQfJ17REfuj%2Bv02XAlfxbNKALYKymVc%3D");
    }
}

メソッドはFetchTokenメイン アプリケーションで完全に正常に動作し、ユニット テスト ケースでのみ問題が発生します。必要なすべての API エンドポイントと資格情報がアプリケーションとユニット テスト ケースの両方の構成に同じように配置されていることを確認しました。

4

0 に答える 0