对于检索实时股票价格的应用程序,我发现我的单元测试断言由于两个调用之间的价格波动而返回漏报,这些调用填充了包含expected
和actual
测试值的变量。
虽然这是可以预期的,但我希望听到有关如何解决这个问题的不同方法。我最初的想法是允许波动幅度(检索到的股票价格之间差异约为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);
}
有什么建议吗?或者我应该学会忍受它吗?
答案 0 :(得分:7)
保存对服务器的调用,然后编写单元测试,验证您是否可以解析该字符串。 您还可以编写一个测试来验证您是否尝试使用指定符号的正确URL。那些将是单元测试。你是集成测试。
答案 1 :(得分:0)
您可以尝试模拟DownloadString方法并返回一些已知值(来自文件或测试中的硬编码变量)。 现在,您不仅要测试您的代码,还要测试互联网连接,雅虎网站等。