2013-02-01 64 views
0

我是PHP單位的新手,現在我有一個困境。如何測試從其他函數獲取返回數據的函數?

功能結構是這樣的:

function myfunc($arg) { 
    $data = $anotherobject->myfunc2($arg); 
    $diffdata = $anotherobject->myfunc3($arg); 
    return $data. " ".arg. " ". $diffdata; 
} 

我怎樣才能verifiy輸出是它應該是什麼?

+0

你想驗證FUNC1,FUNC2或FUNC3? –

+0

我想驗證myfunc是否返回正確的數據。我有一點線索,它應該通過使用模擬來完成? 實際上它是一種面向對象的風格,myfunc2和3來自另一個對象 –

+0

從@qrazi提供的解決方案是最好的。 –

回答

2

編輯: Jasir當然也是正確的。單元測試的重點是測試一個儘可能小的單元。所以你也可以進行測試來覆蓋myfunc2()和myfunc3()。

編輯

Using a stub結束時,你可以設置myfunc2所()和myfunc3()返回一個已知值。然後,您可以像通常那樣聲明myfunc的返回。

線沿線的東西:

<?php 
require_once 'SomeClass.php'; 

class StubTest extends PHPUnit_Framework_TestCase 
{ 
    public function testStub() 
    { 
      // Create a stub for the SomeClass class. 
      $stub = $this->getMock('SomeClass'); 

      // Configure the stub. 
      $stub->expects($this->any()) 
       ->method('myfunc2') 
       ->will($this->returnValue('foo')); 

      $stub->expects($this->any()) 
       ->method('myfunc3') 
       ->will($this->returnValue('bar')); 

      // Calling $stub->doSomething() will now return 
      // 'foo'. 
      $this->assertEquals('foo somearg bar', $stub->myfunc('somearg')); 
     } 
    } 
?> 
+0

他是PHP的新手我不認爲他可以處理PHPUnit測試LoL 順便說一句你的解決方案值得 –

+0

謝謝,這使我不清楚的事情。我也明白,測試應該由func完成func。 –

1

您應該只測試myfunc()輸出。如果您需要測試myfunc2(),myfunct3(),請爲它們分別進行測試。

function test_myfunc() { 
    ... 
} 

function test_myfunc2() { 
    ... 
} 

function test_myfunc3() { 
    ... 
}