0

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);
    }

助言がありますか?それとも、それと一緒に暮らすことを学ぶべきですか?

4

2 に答える 2

7

サーバーへの呼び出しが受け取るものを保存し、その文字列を解析できることを確認する単体テストを記述します。指定されたシンボルの正しい URL をヒットしようとしていることを確認するテストを作成することもできます。それらは単体テストになります。あなたは統合テストです。

于 2012-11-19T16:09:00.163 に答える
0

DownloadString メソッドをモックして、(ファイルまたはテストでハードコードされた変数から) 既知の値を返すことができます。現在、コードをテストしているだけでなく、インターネット接続、Yahoo Web サイトなどもテストしています。

于 2012-11-19T16:12:32.990 に答える