为具有网络连接依赖性的方法编写单元测试

时间:2017-04-11 18:17:57

标签: c# unit-testing tdd nunit

我正在编写一个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连接,要获得此异常?测试这种异常的有意义的方法是什么?

2 个答案:

答案 0 :(得分:1)

您没有理由测试连接失败会抛出WebException。这不是你的代码正在进行投掷。

OTOH,您可能希望在某些时候测试您的代码在抛出时正确处理WebException 。为此,您必须包装或模拟基础Web请求。

答案 1 :(得分:1)

单元测试理想情况下不应该依赖于网络连接等外部依赖性。正如上面的评论(链接)中提到的,你想模拟这种行为。否则使用真实连接,您将无法测试故障情况,即良好的连接和自动连接。

单元测试应遵循FIRST acronym

  • 快速
  • 独立
  • 重复
  • 自我验证
  • 及时

如果您需要测试来实际使用物理连接,那么您可以编写集成或系统测试 - 也许使用BDD。

这种方法的好处是,您的单元测试套件可以快速(自动化)运行,涵盖许多场景,并为您提供非常快速的反馈。虽然集成测试的运行频率较低(如果需要),但您不必担心它们需要多长时间,因为您在此处所做的只是证明端到端连接。