我有一个简单的代码。我怎么能为它编写测试?

时间:2010-11-14 09:45:22

标签: php automated-tests phpunit functional-programming

当我写这段代码时,我没有使用phpunit和功能测试,因为我不知道如何为这段代码编写测试。我知道如何编写其他函数和代码的测试,但我不知道这个代码需要哪个测试。谁能解释一下? 所有功能都是谷歌adwords API。不是我自己的。我也不需要测试它们。

    $adStatsSelector = new AdStatsSelector();
$adStatsSelector->dateRange = new
      DateRange('20100901','20101001');
$user = new AdWordsUser();
$user->LogDefaults();
$servicedAccountService = $user->GetServicedAccountService('v201008');
$selector = new ServicedAccountSelector(); 
$graph = $servicedAccountService->get($selector); 
foreach($graph->accounts as &$account) {
    $user->SetClientId($account->login);
    $campaignService = $user->GetCampaignService('v201008');
    $selector = new CampaignSelector(null,null,$adStatsSelector);
    $page = $campaignService->get($selector);
    $account->campaigns = $page->entries;
}

1 个答案:

答案 0 :(得分:3)

由于代码的存在,很难定义测试,因为它不是我们可以调用的形式;我们不能改变输入并确保我们获得某些输出。

所以我可以看到你可以测试的是 graph 是否最终填充了预期的数据。不知何故,您调用此代码并查看图中的内容。

现在看一下代码中的几个问题:

  1. 为什么日期范围是硬编码的?
  2. 那是什么v201008,为什么硬编码?
  3. 错误处理在哪里?可以那些$ user-> ???方法失败了?
  4. 所以我会修改这段代码来概括它,并把它放在一个函数中。然后我们可以测试这个功能。想象一个函数(伪代码)

     graph = getGraph(start, end, version)
    

    现在你可以改变输入并检查响应,但是......你怎么知道响应应该是什么?您可以尽力模拟您使用的服务。然后,您还可以断言您使用正确的参数调用服务,并且对于某些测试强制服务引发错误条件。

    总结:编写可测试的代码确实有助于你想要测试的东西,这样你往往会专注于沉闷但重要的东西,比如错误处理。