2010-11-14 78 views
0

当im写这段代码时,我没有使用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; 
} 
+0

您测试对于给定的输入,您会收到某个预期的输出。无论是你的问题,还是包含的代码都不显示输入和输出。请澄清一下,我们可能会帮助你为它写一个测试。 – Gordon 2010-11-14 13:17:31

回答

3

由于代码的立场,很难定义测试,因为它不是我们可以调用的东西的形式;我们不能改变投入,并确保我们得到某些产出。

所以尽我所能看到的东西,你可以测试是否结束填充预期的数据。不知何故,你调用这段代码,看看图中的内容。

现在看代码的几个问题浮现在脑海中:

  1. 为什么日期范围硬编码?
  2. 什么是v201008,为什么是硬编码?
  3. 错误处理在哪里?可以这些$用户 - >?方法失败?

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

graph = getGraph(start, end, version) 

的功能,现在你可以改变输入和检查响应,但是......你怎么知道的反应应该是什么呢?您可能会尽最大努力嘲笑您使用的服务。然后您可以断言您正在使用正确的参数调用服务,并且对于某些测试强制服务引发错误条件。简介:编写可测试的代码真的有助于在测试内容时进行测试,因此您倾向于专注于沉闷但重要的内容,如错误处理。

+0

+1写得很好。你可能想要包含一些链接到一个模拟库的PHP和也许提到IoC/DI。 – 2010-11-14 10:30:29

+0

@克劳斯谢谢。有一件事让我很困惑,人们有很多好点子,并且被允许编辑答案并改进它们。它很少发生。如果你有一个最喜欢的嘲笑图书馆,为什么不编辑答案并提到它? – djna 2010-11-14 10:43:23

+0

你是对的。问题是我不使用php,我不想推荐我通过使用google搜索而没有使用它的第一个库。此外,我不*致力于改善您的答案并(可能)为您赢得额外的声誉;-)但是,您是对的。很少有人真正编辑答案。编辑问题更为常见。我想它的确要尊重回答者(*和*代表事物)。 – 2010-11-14 10:56:32

相关问题