代码之家  ›  专栏  ›  技术社区  ›  RusAlex

我有一个简单的代码。如何为它编写测试?

  •  0
  • RusAlex  · 技术社区  · 14 年前

    当我编写这段代码时,我没有使用phpunit和函数测试,因为我不知道如何为这段代码编写测试。我知道如何为其他函数和代码编写测试,但我不知道这段代码需要哪个测试。有人能解释吗? 所有功能都是Google 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 回复  |  直到 14 年前
        1
  •  3
  •   djna    14 年前

    正如代码所显示的那样,很难定义测试,因为它不是我们可以调用的形式;我们不能改变输入并确保获得特定的输出。

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

    现在,看看代码,我们会想到几个问题:

    1. 为什么日期范围是硬编码的?
    2. V21008是什么?为什么硬编码?
    3. 错误处理在哪里?那些$user->????方法失败了吗?

    所以我会修改这段代码来概括它,并把它放到一个函数中。然后我们可以测试函数。想象一个函数(伪代码)

     graph = getGraph(start, end, version)
    

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

    总结:编写可测试的代码在您想要测试东西的时候真的很有帮助,在这样做的时候,您往往会把注意力集中在一些枯燥但不重要的东西上,比如错误处理。