2013-02-01 38 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() { 
    ... 
}