PHPUnit - $ _POST değişkeni ile testi MVC denetleyicisi

4 Cevap php

Ben Kohana ile PHPUnit ile çalışmaya başlıyorum. Benim uygulama sadece, bazı form verileri alır doğrular ve ekler / güncellemeler / veritabanı /-/ içine siler birçok denetleyicileri var. Nasıl bunun için bir test durumlarda yazmak gerekir.

Ben bir işlevi sınamak istiyorsanız ben veri sağlayıcı işlevini yazmak ve sadece beklenen biriyle döndü değerini karşılaştırmak olduğunu biliyoruz. Ama benim giriş verileri (formları data) $_POST değişkene aktarılıyor. Bunu nasıl test etmeliyim? Eklenen veriler veritabanında gerçekten olup olmadığını ve bundan sonra, ben kontrol etmelisiniz? Testler veya bazı örnekler / öğreticiler bağlantıları türü için benim bazı ana hatlarına verin. Teşekkürler.

4 Cevap

Eğer veritabanında değerleri kontrol için POSTed veri alma tüm yol test ise, her şeyden önce, artık bu birim testi değil: diğerlerinden izole bir bileşeni test değildir, ancak entegrasyonu test birlikte bu bileşenler.

Bu test sert şeyler yapar:

  • Eğer sert şekillerde verileri sağlamak zorunda: sadece bir yönteme parametre olarak, ama bütün uygulama parametreleri (which means forging POST data, here, for instance)
  • Eğer doğrulamak için daha fazla şeyler var: bir yöntem değil, sadece dönüş değeri, ya da bir istisna attı eğer
  • onların nedenini bulmak için izini arızaları zor hale getirecek bir başarısızlık (problem in some PHP code, problem in the database, database server not being available, ...), neden birkaç farklı ve belki de ilgisiz şeyler var.


Note that I didn't say that kind of "integration" tests is not useful, btw ;-)


Still, forging the $_POST array is quite simple : it is not read-only, and you can store whatever you want in it.

Yani, test davanın başında, hiçbir şey bunu ihtiyacınız herhangi bir veri enjekte önler.

Ne Pascal söyledi. Ayrıca, özellikle http / tarayıcı düzeyde etkileşimin test edilmesi için araçlar olduğunu unutmayın. Sen SimpleTest web test durumları kullanabilirsiniz (bir taklit / script tarayıcınızı kullanır). Eğer phpunit tercih ederseniz, ben size oldukça kolay phpunit içinde SimpleTest tarayıcısını kullanabilirsiniz düşünüyorum. Aksi phpunit entegrasyonu sahip olduğu için daha ağır Selenyum IDE vardır.

I agree with Pascal that $_POST array is not a read only array and you can manipulate it as required. Also it depends on your framework, Zendframework provides the freat flexiblility to manipulate the variables as in the example in the link

http://xebee.xebia.in/2010/02/05/test-driven-development-with-zend-framework-and-phpunit/comment-page-1/#comment-3431

But here you loose the advantage of Using PHPUnit's in built function like (assertions, dataprovider, etc) But in most of our case we Use global arrays $_POST, $_GET, or $_REQUEST and when we see PHPUnit examples, we google "How to set POST variables in PHPUnit" As the PHPUnit does not demostrate MVC test case(that's bit of spoon feeding though) We need to get the instance of our framework and then we can play around our framework and PHPUnit Also your way of testing will be different other's way

Peki sadece bu gibi Mesaja VAR ayarlanır yapmak gerekir.

$this->reques ->setMethod('POST') ->setPost(array( 'param1' => 'value1', 'param2' => 'value2' ));

Senin için çalıştığını umuyoruz

Gülümseme tutun Kdecom