2010-11-14 121 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

相關問題