簡體   English   中英

單元測試PHP腳本

[英]Unit Testing a PHP Script

我有一些作為cronjobs運行的php腳本。 沒有類,只有幾個函數。

我想用PHPUnit測試腳本以確保一切正常,但看來我需要將php作為一個類重寫,我不想這樣做(或不知道如何做)。

例如,如果我有一個腳本,而它的唯一功能是將1和2加在一起,

 <?php

 $a=1;
 $b=2
 $c=$a+$b;

 ?>

如何使用phpunit測試$ c == 3?

謝謝唐

對於您的示例,您無需測試$ c = 3。

但這是因為您的示例過於簡單。 腳本執行后,變量$c停止存在。 因此,它的存在並不重要。 您想要測試代碼的功能,而不是代碼的功能。

我將對您的示例進行一些修改:

job.php

<?php

$a=1;
$b=2
echo $a + $b;

?>

現在,我們實際上有一些輸出和某些行為。 測試為此:

public function testJob() {
   require('job.php');
   $this->expectOutputString('3');
} 

PHPUnit可以對stdOut進行斷言。 我們確保代碼輸出期望的結果。 您對這些類型的文件進行的測試將檢查它們是否正確。 由於PHP的require語句將在此時執行文件,因此我們可以運行腳本並檢查其輸出。

如果文件具有功能,則只需將其包括在內,然后在各自的測試中檢查每個功能。

不一定要有類,您可以用相同的方法對函數進行單元測試! 您甚至可以在不封裝功能的情況下進行單元測試,盡管這樣做會更加困難。

在特定情況下,我要做的是使用靜態方法將代碼封裝在函數或類中。

<?php
 function add($a, $b) {
    return $a + $b;
 }
 $c=add($a, $b);
?>

然后提供對add函數的測試。 $ a和$ b值的來源很重要。 那就是你需要嘲笑的東西。 如果您可以控制其值,則可以使用

global $c;
// your test setup 
include(<cron file>);
$this->assertEquals($expectedValue, $c);

通常,較小的測試單元是一種函數或方法,您可以將輸入傳遞給該函數或方法,並且可以從中期望獲得一定的輸出。 因此,如果您的腳本包含功能,則可以對其進行測試。

但是,在您描述的特定情況下,您可以簡單地斷言$c等於3 ,但這對測試沒有多大幫助,因為測試應該對單元black-box test

另外,如果要測試的腳本調用了某些全局PHP函數,則可以模擬這些函數並斷言它們是按預期方式調用的( 這里是有關如何模擬全局函數的示例)。 相同的模擬也可以應用於執行其他全局PHP函數的腳本中的函數。 但是,如果腳本執行某些破壞性的操作(例如刪除文件,就像您無法模擬刪除功能一樣),則可能要小心,但結果可能會令人討厭。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM