我正在编写一个Downloader(为了TDD的乐趣),因为我有一个方法,其职责是连接到文件。
int * a = malloc(...)
我写了一个测试用于测试连接超时情况的测试。
class FileConnectorHttp : IFileConnector
{
public void ConnectToFile()
{
//creating a concrete web request here.
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(UriForTheFileToConnect);
//sending HEAD request.
webRequest.Method = "HEAD";
//other logic for connection will go here.
try
{
HttpWebResponse response = webRequest.GetResponse() as HttpWebResponse;
}
catch (ProtocolViolationException e)
{
throw;
}
catch (InvalidOperationException e)
{
throw;
}
}
}
为了解决我的Wifi连接,要获得此异常?测试这种异常的有意义的方法是什么?
答案 0 :(得分:1)
您没有理由测试连接失败会抛出WebException。这不是你的代码正在进行投掷。
OTOH,您可能希望在某些时候测试您的代码在抛出时正确处理WebException 。为此,您必须包装或模拟基础Web请求。
答案 1 :(得分:1)
单元测试理想情况下不应该依赖于网络连接等外部依赖性。正如上面的评论(链接)中提到的,你想模拟这种行为。否则使用真实连接,您将无法测试故障情况,即良好的连接和自动连接。
单元测试应遵循FIRST acronym
如果您需要测试来实际使用物理连接,那么您可以编写集成或系统测试 - 也许使用BDD。
这种方法的好处是,您的单元测试套件可以快速(自动化)运行,涵盖许多场景,并为您提供非常快速的反馈。虽然集成测试的运行频率较低(如果需要),但您不必担心它们需要多长时间,因为您在此处所做的只是证明端到端连接。