我的PHPUnit测试存在一些问题,因为PHPUnit默认测试套件实际上并没有涵盖代码复杂性,并且我在这个PHPUnit测试中一直收到错误。
下面的是控制器代码:
class ModulController extends \TYPO3\CMS\Extbase\Mvc\Controller\ActionController {
const RETURNMODUL = "returnModul";
const MODULNAME = "modulname";
const MODULNUMMER = "modulnummer";
const GUELTIGKEITSZEITRAUM = "gueltigkeitszeitraum";
const FACHNAME = "fachname";
const FACHNUMMER = "fachnummer";
const PRUEFER = "pruefer";
const NEWSTRING = "new";
const NOTENSCHEMA = "notenschema";
/**
* Protected Variable modulRepository wird mit NULL initialisiert.
*
* @var \ReRe\Rere\Domain\Repository\ModulRepository
* @inject
*/
protected $modulRepository = NULL;
/**
* Protected Variable fachRepository wird mit NULL initialisiert.
*
* @var \ReRe\Rere\Domain\Repository\FachRepository
* @inject
*/
protected $fachRepository = NULL;
/**
* Protected Variable noteRepository wird mit NULL initialisiert.
*
* @var \ReRe\Rere\Domain\Repository\NoteRepository
* @inject
*/
protected $noteRepository = NULL;
/**
* Protected Variable prueflingRepository wird mit NULL initialisiert.
*
* @var \ReRe\Rere\Domain\Repository\PrueflingRepository
* @inject
*/
protected $prueflingRepository = NULL;
/**
* Protected Variable intervallRepository wird mit NULL initialisiert.
*
* @var \ReRe\Rere\Domain\Repository\IntervallRepository
* @inject
*/
protected $intervallRepository = NULL;
/**
* Protected Variable settingsRepository wird mit NULL initialisiert.
*
* @var \ReRe\Rere\Domain\Repository\SettingsRepository
* @inject
*/
protected $settingsRepository = NULL;
/**
* Protected Variable objectManager wird mit NULL initialisiert.
*
* @var \TYPO3\CMS\Extbase\Object\ObjectManagerInterface
* @inject
*/
protected $objectManager = NULL;
/**
* Mit dieser Methode werden alle Module des aktuell ausgewählten Intervalls angezeigt.
*
* @return void
*/
public function listAction() {
$moduls = $this->modulRepository->findAll();
$intervall = $this->intervallRepository->findByUid(1);
$settings = $this->settingsRepository->findByUid(1);
$filteredmoduls = array();
// Prüfen ob Settings leer sind
if ($settings == Null) {
$mail = $this->objectManager->create('\\ReRe\\Rere\\Domain\\Model\\Settings');
$mail->setMailAbsender("DEFAULT");
$this->settingsRepository->add($mail);
}
// Prüfen, ob die Tabelle wirklich einen Wert hat (also ob ein Intervall gesetzt wurde).
if ($intervall == Null) {
// wenn Intervall noch nicht gesetzt ist, wird ein Intervall-Objekt erzeugt
$createdIntervall = $this->objectManager->create('\\ReRe\\Rere\\Domain\\Model\\Intervall');
$createdIntervall->setAktuell('WS14/15');
$createdIntervall->setType('studienhalbjahr');
$this->intervallRepository->add($createdIntervall);
$this->redirect('list');
}
if ($intervall != Null) {
// wenn Intervall gesetzt ist, wird es geholt.
$akteullesintervall = $intervall->getAktuell();
$intervallType = $intervall->getType();
}
// Alle Module des aktuellen Intervalls holen
foreach ($moduls as $modul) {
if ($modul->getGueltigkeitszeitraum() == $akteullesintervall) {
array_push($filteredmoduls, $modul);
}
}
// Ausgabe an View
$this->view->assignMultiple(array(
'aktuellintervall' => $akteullesintervall,
'intervallType' => $intervallType,
'moduls' => $filteredmoduls
));
return $this->view->render();
}
}
以下是我配置的测试代码:
class ModulControllerTest extends \TYPO3\CMS\Core\Tests\UnitTestCase {
const OBJECTMANAGER = 'TYPO3\\CMS\\Extbase\\Object\\ObjectManager';
const MODULCONTROLLER = 'ReRe\\Rere\\Controller\\ModulController';
const MODULREPOSITORY = 'ReRe\\Rere\\Domain\\Repository\\ModulRepository';
const INTERVALLREPOSITORY = 'ReRe\\Rere\\Domain\\Repository\\IntervallRepository';
const SETTINGSREPOSITORY = 'ReRe\\Rere\\Domain\\Repository\\SettingsRepository';
const MODULREPO = 'modulRepository';
const INTERVALLREPO = 'intervallRepository';
const SETTINGSREPO = 'settingsRepository';
const VIEWINTERFACE = 'TYPO3\\CMS\\Extbase\\Mvc\\View\\ViewInterface';
const ASSIGN = "assign";
const ASSIGNMULTIPLE = "assignmultiple";
/**
* @var \ReRe\Rere\Controller\ModulController
*/
protected $subject = NULL;
protected function setUp() {
$this->subject = $this->getMock(self::MODULCONTROLLER, array('redirect', 'forward', 'addFlashMessage'), array(), '', FALSE);
}
protected function tearDown() {
unset($this->subject);
}
/**
* @test
*/
public function listActionFetchesAllModulsFromRepositoryAndAssignsThemToView() {
$allModuls = $this->getMock('TYPO3\\CMS\\Extbase\\Persistence\\ObjectStorage', array(), array(), '', FALSE);
$modulRepository = $this->getMock(self::MODULREPOSITORY, array('findAll'), array(), '', FALSE);
$modulRepository->expects($this->once())->method('findAll')->will($this->returnValue($allModuls));
$this->inject($this->subject, self::MODULREPO, $modulRepository);
$allSettings = $this->getMock('TYPO3\\CMS\\Extbase\\Persistence\\ObjectStorage', array(), array(), '', FALSE);
$intervall = new \ReRe\Rere\Domain\Model\Intervall();
$mail = $this->getMock('\\ReRe\\Rere\\Domain\\Model\\Settings', array(), array(), '', FALSE);
$mail->expects($this->once())->method('setMailAbsender')->with("DEFAULT");
$settingsRepository = $this->getMock(self::SETTINGSREPOSITORY, array('add'), array(), '', FALSE);
$settingsRepository->expects($this->once())->method('add')->will($this->returnValue($mail));
$this->inject($this->subject, self::SETTINGSREPO, $settingsRepository);
$createdIntervall = $this->getMock('\\ReRe\\Rere\\Domain\\Model\\Intervall', array(), array(), '', FALSE);
$createdIntervall->expects($this->at(0))->method('setAktuell')->with('WS14/15');
$createdIntervall->expects($this->at(1))->method('setType')->with('studienhalbjahr');
$intervallRepository = $this->getMock(self::INTERVALLREPOSITORY, array('add'), array(), '', FALSE);
$intervallRepository->expects($this->once())->method('add')->will($this->returnValue($createdIntervall));
$this->inject($this->subject, self::INTERVALLREPO, $intervallRepository);
$this->subject->expects($this->once())->method('redirect')->with('list');
$aktuellesIntervall= $this->getMock('\\ReRe\\Rere\\Domain\\Model\\Intervall', array(), array(), '', FALSE);
$aktuellesIntervall->expects($this->once())->method('getAktuell');
$intervallType= $this->getMock('\\ReRe\\Rere\\Domain\\Model\\Intervall', array(), array(), '', FALSE);
$intervallType->expects($this->once())->method('getType');
$objectManager = $this->getMock(SELF::OBJECTMANAGER, array(), array(), '', FALSE);
$objectManager->expects($this->once())->method('create')->will($this->returnValue($intervall));
$objectManager->expects($this->once())->method('create')->will($this->returnValue($allSettings));
$this->inject($this->subject, 'objectManager', $objectManager);
$view = $this->getMock(self::VIEWINTERFACE);
$view->expects($this->once())->method(self::ASSIGNMULTIPLE)->with(array(
'intervallType' => $intervallType,
'aktuellintervall' => $aktuellesIntervall,
'moduls' => $allModuls
));
$this->inject($this->subject, 'view', $view);
$this->subject->listAction();
}
}
测试在PHPUnit v 4.3.5上运行,测试失败,但我收到没有错误消息。测试就这样失败了。 任何答案将非常感激。一直在寻找约一个月的答案..