单位测试HFT股票价格 - 由于价格波动,断言不断失败

Car*_*los 0 c# unit-testing assert mstest

对于检索实时股票价格的应用程序,我发现我的单元测试断言由于两个调用之间的价格波动而返回假阴性,这些调用填充了包含expectedactual测试值的变量.

虽然这是可以预期的,但我希望听到有关如何解决这个问题的不同方法.我最初的想法是允许波动幅度(检索到的股票价格之间差异约为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");
    }
Run Code Online (Sandbox Code Playgroud)

这是单元测试,它对股票价格进行"硬编码"(已知是成功的)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);
    }
Run Code Online (Sandbox Code Playgroud)

有什么建议?或者我应该学会忍受它?

Pio*_*rak 7

保存对服务器的调用,然后编写单元测试,验证您是否可以解析该字符串.您还可以编写一个测试来验证您是否尝试使用指定符号的正确URL.那些将是单元测试.你是集成测试.