0

对于检索实时股票价格的应用程序,我发现我的单元测试断言返回假阴性,这是由于两个调用之间的价格波动填充了持有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");
    }

这是对股票价格发出“硬编码”(已知是成功的)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 方法并返回一些已知值(来自文件或测试中的硬编码变量)。现在,您不仅要测试代码,还要测试互联网连接、雅虎网站等。

于 2012-11-19T16:12:32.990 回答