Autor | Zpráva | ||
---|---|---|---|
jefitto44 Profil |
#1 · Zasláno: 16. 11. 2015, 12:59:28
Ahojte, mám class Article, ktorý vyzerá takto
<? class Article { public function createNewArticle($title, $HTMLtext, $author, $category_id) { // add a new article to DB $db = mysqli_connect("localhost", "root", "", "webicon_articles"); $query = mysqli_query($db, "INSERT INTO articles (title, HTMLtext, author, category_id) VALUES ('".$title."', '".$HTMLtext."', '".$author."', '".$category_id."')"); if($query) echo "The article was saved..."; else echo "ERROR! Article wasn't saved"; } public function printArticle($article_id) { $db = mysqli_connect("localhost", "root", "", "webicon_articles"); $query = mysqli_query($db, "SELECT * FROM articles WHERE article_id = ".$article_id); $row = mysqli_fetch_assoc($query); print " Title: <h2>".$row["title"]."</h2> <p>".$row["HTMLtext"]."</p> <b>Author:</b> ".$row["author"]."<br> <b>Category ID:</b> ".$row["category_id"]." "; } static function returnAllArticles() { $db = mysqli_connect("localhost", "root", "", "webicon_articles"); $query = mysqli_query($db, "SELECT * FROM articles"); print "<table>"; while($row = mysqli_fetch_object($query)) { print " <tr><td>".$row->title." <td>".$row->HTMLtext." <td>".$row->author." <td>".$row->category_id." </tr> "; } print "</table>"; } } Skúsme teraz neriešiť, že je to všetko neobjektove a že je to spagetti atď atď... Potrebujem v PHP Unit napísať test, ktorý by používal túto existujúcu classu a použil by z nej metódu createNewArticle a vytvoril by článok a uložil ho do databázy. Momentálne test u mňa vyzerá takto: <?php class ArticleTest extends PHPUnit_Framework_TestCase { public function testCreateNewArticle() { $title = "New Article No.1"; $HTMLtext = "In ac iaculis tellus, id sagittis ex. Donec quis lorem quam. Sed vel sem nec odio gravida lobortis. Suspendisse varius cursus elementum. In nec aliquam ipsum, a vulputate magna. Vivamus hendrerit, nulla id efficitur lobortis, tortor erat ultrices leo, vel molestie nulla erat sed est. Curabitur et tellus sed est fermentum iaculis sed at est."; $author = "Issac Newton"; $category_id = 12; $this->createNewArticle($title, $HTMLtext, $author, $category_id); } } ?> Chyba je, že PHPUnit akosi nepochopil, že chcem v tom teste použiť funkciu, ktorá existuje vnútri "Class Article", ale snaží sa ju hľadať v "class ArticleTest", čo samozrejme nenájde... ako sa to dá spraviť? |
||
juriad Profil |
#2 · Zasláno: 16. 11. 2015, 13:28:09
Musíš v testu vytvořit instanci Article a na ní volat tu metodu. Samotná třida Article by neměla vůbec tušit o existenci databázi ani se snažit cokoli vypisovat. Na tom kusu kódu je špatně snad všechno.
|
||
jefitto44 Profil |
Áno, nemala by, ale tu tuší, pretože toto je len "sample" kód, ktorý potrebujem na jednu špecifickú vec, nebude to však nič verejne dostupné ani používané, takže nou stres
Čiže klasicky v "testCreateNewArticle" si zavolám že new Article() ? Aaaa, takto mi to nefunguje... |
||
juriad Profil |
#4 · Zasláno: 16. 11. 2015, 14:51:19
jefitto44:
Ano vytvoříš si instanci: $a = new Article(); $a->createNewArticle(...); Ale netuším, jak to chceš testovat, když ta funkce nevrací žádnou hodnotu, ani nevyhazuje výjimku. Mohl bys leda pomocí ob_* funkcí zachytit výstup a v něm hledat řetězec „ERROR!“. Tady vidíš krásu unit testingu - nutí tě psát kód pořádně a ne jako prase.
|
||
jefitto44 Profil |
#5 · Zasláno: 16. 11. 2015, 20:38:20
Ano a napíše mi to, že class Article doesn't exists...
Testovať to chcem tak, že si potom otvorím phpmyadmin a uvidím, či tam je nový artikel, alebo nie... |
||
xROAL Profil |
#6 · Zasláno: 17. 11. 2015, 00:53:58
jefitto44:
„Testovať to chcem tak, že si potom otvorím phpmyadmin a uvidím, či tam je nový artikel, alebo nie...“ To si sprav úplne bežný script a spusti ho. Pointa automatizovaných testov je, že sa veci testujú automaticky, bez nutnosti niečo ručne kontrolovať. „Ano a napíše mi to, že class Article doesn't exists...“ A includuješ ten súbor s tou triedou? |
||
Alphard Profil |
#7 · Zasláno: 17. 11. 2015, 12:54:41
jefitto44:
„Testovať to chcem tak, že si potom otvorím phpmyadmin a uvidím, či tam je nový artikel, alebo nie“ To snad ne, co se tady člověk nedozví :-) PHPUnit má sloužit automatizovaným testům. V tomhle případě bych doporučil vůbec do toho netahat PHPUnit, ale jednoduše si někde v adresáři tests vytvořit script s testem $a = new Article(); $a->createNewArticle(...); |
||
Časová prodleva: 8 let
|
0