expected
ライブ株価を取得するアプリケーションの場合、およびactual
テスト値を保持する変数を設定する 2 つの呼び出し間の価格変動が原因で、単体テスト アサーションが偽陰性を返すことがわかりました。
これは当然のことですが、この問題をどのように回避するかについて、さまざまなアプローチを聞きたいと思っています。私の最初の考えは、変動のマージンを許容することでした(検索された株価の差は約2%)
これは、株価を取得するために Yahoo に Web リクエストを送信するコードです。
public string makeWebRequest(string stockSymbol, string dataRequestID)
{
string request = webClient.DownloadString("http://finance.yahoo.com/d/quotes.csv?s=" + stockSymbol +
"&f=" + dataRequestID).Replace("\r\n", "").Replace("\"", "");
if (request.Equals("N/A") || request.Equals("0"))
return "0.00";
return request;
}
public string getPrice(string stockSymbol)
{
return makeWebRequest(stockSymbol, "l1");
}
これは、「ハードコーディングされた」(成功することが知られている) 株価の Web 要求を作成し、結果をexpected
変数に割り当てる単体テストです。その後、アプリケーション object.function を使用して今回のみ価格を取得するために別の呼び出しを実行し、それをactual
変数に割り当てます。
呼び出し間のデルタは 300 ミリ秒です
[TestMethod]
public void getPrice()
{
string expected = request.DownloadString("http://finance.yahoo.com/d/quotes.csv?s=" + testSymbol + "&f=l1").Replace("\r\n", "").Replace("\"", "");
string actual = yahoo.getPrice(testSymbol);
Assert.AreEqual(expected, actual);
}
助言がありますか?それとも、それと一緒に暮らすことを学ぶべきですか?