2013-11-24 4 views
0

나는이 시험에 따라 다음 또한phpunit을은 동일

class ReportTable_Renderer_Html_Decorator_AddRecord extends ReportTable_Renderer_Html_Decorator_CallParent 
{ 
    public function renderAddItem(ReportTable $table) 
    { 
     $newRow = array(); 

     $masterIDColumn = $this->getMasterIDColumn(); 
     if (!empty($masterIDColumn)) { 
      $newRow[$masterIDColumn] = $this->getOwner()->getMasterID(); 
     } 

     foreach ($table->getColumns() as $name => $column) { 
      $newRow[$name] = ''; 
     } 
     $newRow['id']    = '0'; 
     if (!empty($newRow[$masterIDColumn])) $newRow['id'] .= '_' . $newRow[$masterIDColumn]; 
     $newRow[$this->getColumn()] = $this->getText(); 

     $this->getRowStyle()->getGroupStyles()->add('do_not_print grey'); 

     return $this->getParent()->renderRowContent($table, $newRow); 
    } 

및 그 기능을 내가 테스트

class ReportTable_Renderer_Html_Decorator_Base extends ReportTable_Renderer_Html 
{ 
    public function renderRowContent(ReportTable $table, array $row) {} 
    public function renderRowSetFooter(ReportTable $table) {} 
} 
에 대한 스텁하기 위해 필요한이 (간접) 부모 클래스,

내 테스트 : 나는 두 조롱 기능 발생이 오류 메시지와 함께 붙어있어

public function testRenderRowSetFooter() 
{ 
    $table = new ReportTable('a','b'); 
    $table->addColumn(new ReportTable_Column('one', 'one')); 
    $table->addColumn(new ReportTable_Column('two', 'two')); 
    $table->addColumn(new ReportTable_Column('three', 'three')); 

    $testText = 'test text'; 
    $parentFooterText = 'parent.parent'; 
    $groupID = 234; 
    $addText = 'Add me. Add me now!'; 
    $newRow = array('one' => $addText, 'two' => $groupID, 'three' => '', 'id' => 0); 
    $parent = $this->getMock('ReportTable_Renderer_Html_Base', array('renderRowContent', 'renderRowSetFooter')); 
    $parent->expects($this->any())->method('renderRowContent')->with($table, $newRow)->will($this->returnValue($testText)); 
    $parent->expects($this->any())->method('renderRowSetFooter')->with($table)->will($this->returnValue($parentFooterText)); 
    $subject = $this->getSubject($parent, array('text' => $addText, 'column' => 'one', 'masterIDColumn' => 'two')); 
    $subject->getOwner()->setMasterID($groupID); 
    $this->assertEquals($parentFooterText . $testText, $subject->renderRowSetFooter($table)); 
} 

:

PHPUnit_Framework_ExpectationFailedException : Expectation failed for method name is  equal to <string:renderRowContent> when invoked zero or more times 
Parameter 1 for invocation  Herkt_ReportTable_Renderer_Html_Base::renderRowContent(Herkt_ReportTable Object (...), Array  (...)) does not match expected value. 
Failed asserting that two arrays are equal. 

배열 중 하나는 $ newRow이고, 다른 하나는 분명히 함수의 재 투입입니다. 하지만 나는이 배열에 대한 assertEquals를 추가하지 않았다. 어떻게 이런 일이 벌어지며 시험을 어떻게 수정할 수 있습니까?

답변

2

좋아, 알아 냈어. 나는이 테스트를 물려 받았고 변경된 기능에 적응시키고있다. 무슨 일 때문에 모의 기능으로, 실제 테스트 내 테스트 기능의 변화에 ​​대한 예상 매개 변수를 적용하지 않았기 때문에

그래서 내 테스트가 실패 모의 기능 renderRowContent에 $ newRow를 전달하여 발생한다는 것입니다

이어야합니다.

$newRow = array('masterColumn' => $groupID, 'one' => $addText, 'two' => '', 'three' => '', 'id' => '0_234');