| 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: 11 let
|
|||
0