4.7.5 Testing models
4.7.5.1 Erstellen einer Versuchs-Anwendung (test case)
Der Originaltext dieses Abschnitts hat sich seit der letzen Übersetzung geändert. Bitte hilf dabei die Unterschiede zu lösen. Du kannst:
Lass uns darauf einigen dass wir unseren Muster-Artikel (article model) bereits unter ../app/models/article.php erstellt haben und dieser sollte in etwa wie folgt aussehen:
<?php
class Article extends AppModel {
var $name = 'Article';
function published($fields = null) {
$conditions = array(
$this->name . '.published' => 1
);
return $this->findAll($conditions, $fields);
}
}
?>
<?phpclass Article extends AppModel {var $name = 'Article';function published($fields = null) {$conditions = array($this->name . '.published' => 1);return $this->findAll($conditions, $fields);}}?>
Wir möchten jetzt einen Versuch aufbauen welcher Beispielmodule verwenden wird, allerdings durch Vorrichtungen für Versuche, lässt sich einiges an Funktionalität im Versuch testen.
Die CakePHP Versuchs-Umgebung läd nur einen sehr kleinen Teil der Anwendungen (um Versuche isoliert zu lassen), somit müssen wir zum starten das vorhergehende Module verwenden (in diesem Fall ist das Anwendungsmodul ja schon fertig definiert), dann informiere die Versuchs-Umgebung darüber, dass wir das Modul testen wollen, indem wir herausfinden welche Datenbank-Konfiguration benutzt werden sollte!. Die CakePHP Test-Umgebung ermöglicht eine Datenbank-Konfiguration namen`s test_suite, diese wird gebraucht für alle Module, die auf Vorrichtungen angewiesen sind. Der Datensatz $useDbConfig zu dieser Konfigurationsdatei lässt CakePHP wissen das dieses Modul die test_suite DB-Verbindung benutzt.
Seit wir darüber nachdenken all unsere Anwendungen nochmal wiederzuverwerten umd das ganze dazu benutzen das wir alle want to reuse all our existing modules we will create a test model that will extend from Article, set $useDbConfig and $name appropiately. Let's now create a file named article.test.php in your app/tests/cases/models directory, with the following contents:
<?php
App::import('Model','Article');
class ArticleTest extends Article {
var $name = 'ArticleTest';
var $useDbConfig = 'test_suite';
}
class ArticleTestCase extends CakeTestCase {
var $fixtures = array( 'app.article_test' );
}
?> <?phpApp::import('Model','Article');class ArticleTest extends Article {var $name = 'ArticleTest';var $useDbConfig = 'test_suite';}class ArticleTestCase extends CakeTestCase {var $fixtures = array( 'app.article_test' );}?>
Wie du erkennen solltest we're not really adding any test methods yet, we have just defined our ArticleTest model (that inherits from Article), and created the ArticleTestCase. In variable $fixtures we define the set of fixtures that we'll use.
4.7.5.2 Creating a test method
Es gibt zur Zeit keine Übersetzung für diesen Abschnitt. Bitte hilf mit und übersetze ihn. Mehr Informationen zu Übersetzungen
Let's now add a method to test the function published() in the Article model. Edit the file app/tests/cases/models/article.test.php so it now looks like this:
<?php
App::import('Model', 'Article');
class ArticleTestCase extends CakeTestCase {
var $fixtures = array( 'app.article' );
function testPublished() {
$this->Article =& ClassRegistry::init('Article');
$result = $this->Article->published(array('id', 'title'));
$expected = array(
array('Article' => array( 'id' => 1, 'title' => 'First Article' )),
array('Article' => array( 'id' => 2, 'title' => 'Second Article' )),
array('Article' => array( 'id' => 3, 'title' => 'Third Article' ))
);
$this->assertEqual($result, $expected);
}
}
?>
<?phpApp::import('Model', 'Article');class ArticleTestCase extends CakeTestCase {var $fixtures = array( 'app.article' );function testPublished() {$this->Article =& ClassRegistry::init('Article');$result = $this->Article->published(array('id', 'title'));$expected = array(array('Article' => array( 'id' => 1, 'title' => 'First Article' )),array('Article' => array( 'id' => 2, 'title' => 'Second Article' )),array('Article' => array( 'id' => 3, 'title' => 'Third Article' )));$this->assertEqual($result, $expected);}}?>
You can see we have added a method called testPublished(). We start by creating an instance of our fixture based Article model, and then run our published() method. In $expected we set what we expect should be the proper result (that we know since we have defined which records are initally populated to the article table.) We test that the result equals our expectation by using the assertEqual method. See the section Creating Tests for information on how to run the test.


























