SimpleTest vs PHPunit


127

Her ikisinde de tecrübesi olan birinin, varsa ikisi arasındaki önemli farka biraz ışık tutup tutamayacağını merak ediyordum.

Her birinin belirli bir duruma uygun olmasını sağlayan belirli bir gücü var mı?


PHPUnit'i tercih ederdim çok daha iyi
joao baptista

9
... ve neden? Cevabınızı açıklamaya çalışın, kaynaklar / bağlantılar / örnekler sağlayın. O
Manuel

<snark> Neden ikisi birden olmasın? </snark>
Agi Hammerthief

Yanıtlar:


90

Bu soru oldukça eskidir, ancak hala trafik ve cevaplar aldığı için, benim açımdan burada tekrar belirtmeme rağmen, diğer (daha yeni) sorularda zaten yaptım.

SimpleTest'in hala phpunit'e bir alternatif olarak görülmesi beni gerçekten şaşırttı. Belki sadece yanlış bilgilendirildim ama gördüğüm kadarıyla:

  • PHPUnit standarttır; çoğu çerçeve bunu kullanır (Zend Framework (1 & 2), Cake, Agavi gibi, hatta Symfony bile phpunit için Symfony 2'de kendi Framework'lerini bırakıyor).
  • PHPUnit her PHP IDE'sine (Eclipse, Netbeans, Zend Stuide, PHPStorm) entegre edilmiştir ve güzelce çalışır.
  • Simpletest'in PHP 5.1 (eski) için bir tutulma uzantısı vardır ve başka hiçbir şey yoktur.
  • PHPUnit, kod kapsamı ve test raporları için tüm standart günlük dosyalarını çıkardığından her sürekli entegrasyon sunucusunda sorunsuz çalışır.
  • Simpletest yapmaz. Bu, başlamak için büyük bir sorun olmasa da, "sadece test etmeyi" bırakıp yazılım geliştirmeye başladığınızda sizi çok ısırır (Evet, bu ifade kışkırtıcıdır :) Çok ciddiye almayın).
  • PHPUnit aktif olarak korunur, kararlıdır ve her kod tabanı, her senaryo ve testlerinizi yazmak istediğiniz her yol için harika çalışır.
  • (Öznel) PHPUnit, Simpletest'ten çok daha güzel kod kapsamı raporları sağlar
  • PHPUnit ile bu raporları IDE'nizde de alırsınız ( Netbeans , Eclipse, ...)
  • Ayrıca, a için birkaç öneri var web interface to phpunit tests.

Henüz SimpleTest lehine herhangi bir argüman görmedim. PHPUnit armut aracılığıyla kullanılabildiğinden, kurulumu daha da kolay değildir:

pear channel-discover pear.phpunit.de
pear install phpunit/PHPUnit

ve "ilk test" hemen hemen aynı görünüyor.

İtibariyle PHPUnit 3.7öyle yüklemek daha kolay sadece kullanarak buPHAR Archive

wget http://pear.phpunit.de/get/phpunit.phar
chmod +x phpunit-3.7.6.phar

veya pencereler için sadece indirirken phar ve koşma:

php phpunit-.phar

veya desteklenen composer yükleme yöntemlerini kullanırken

"require-dev": {
    "phpunit/phpunit": "3.7.*"
}

composer.json dosyanıza.


Test etmek istediğiniz her şey için PHPUnit'in bir çözümü olacak ve hemen hemen her yerde yardım bulabileceksiniz (SO, #phpunit irc kanalı freenode üzerinde, hemen hemen her php geliştiricisi;))

Yanlış bir şey belirttiysem veya unuttuysam lütfen düzeltin :)

PHP Test araçlarına genel bakış

Video: http://conference.phpnw.org.uk/phpnw11/schedule/sebastian-bergmann/

Slaytlar: http://www.slideshare.net/sebastian_bergmann/the-php-testers-toolbox-osi-days-2011

Kendini çağıran Atoum gibi şeylerden bahsediyor : "PHP için basit, modern ve sezgisel bir birim test çerçevesi!"


Tam açıklama

Bu cevabı ilk olarak Ocak 2011'de yazdım, burada herhangi bir PHP Test projesiyle hiçbir bağlantım yoktu. O zamandan beri PHPUnit'e katkıda bulundum.


5
Simpleletest'in web testinin phpunit'in web testinden çok daha kolay kurulup çalıştırıldığını keşfettim. Bu hemen hemen php için bir zorunluluk olduğundan, bu küçük ve orta ölçekli projeler için bir kazançtır, sadece bir anda bir test çerçevesine atmak istediğinizde ve önemli olan basit test seviyeleri. Örneğin, web testleri hariç, yalnızca assertTrue () yöntemini basit testte kullanma eğilimindeyim. Elbette web testleri daha karmaşık hale geliyor, ancak aşırı derecede olması gerekmiyor.
Kzqai

1
"> Bu hemen hemen php için bir zorunluluk olduğundan" - Buna kesinlikle katılmıyorum. Testlerini bir tarayıcı üzerinden çalıştıran herhangi bir php projesi (veya çerçevesi) henüz görmedim . Gerçekte hiçbir faydası olmayan pek çok sorun yaratır. Php kodunun ftp senkronizasyonu kullanılarak paylaşılan bir barındırma sisteminde geliştirildiği zamanlar öldü ve gitti ( parmaklar geçti ) ve hiçbir proje, küçük bile olsa çalışan bir web sunucusu gerektiriyor (en fazla bir php kutudan çıkar). BİRİM KLİ veya IDE değil, bir tarayıcı aracılığıyla test etmek o kadar nadir bir kullanım durumudur ki önemli olduğunu düşünmüyorum.
edorian

13
PHPUnit üzerinden SimpleTest'i düşünmek için güçlü bir neden, ikincisinin, testleri çalıştıran sunucuya yüklenmesi gereken bir komut satırı aracı olmasıdır ki bu, bazen sadece includeSimpleTest .PHP dosyalarını (diğerlerinin açıkladığı gibi) yüklemekten çok daha zordur . Kendi test ortamlarını oluşturan profesyonel programcılar için PHPUnit'i yenmek zor gibi görünse de, uygulama için "geliştiricilerin" en iyi ihtimalle "mesleki programcılar" olabileceği PHP tabanlı bir açık kaynaklı uygulamaya bir test sistemi entegre ediyorsanız , o zaman SimpleTest'in sadeliğinin bana gerçek bir çekiciliği var zaten. FWIW.
MikeSchinkel

2
@MikeSchinkel Daha fazla katılamadım. SimpleTest'i ısmarlama uygulama çerçevemiz için entegre bir tarayıcı tabanlı test çözümü olarak kullandık. Her zaman mevcuttu ve çerçevenin kaynağına dahil edildiği için bir svn çekme dışında hiçbir kurulum yapılandırması gerektirmiyordu. CIS entegrasyonu için PHPUnit'e geçtik. Bir Windows mağazası olduğumuz için, PHPUnit'i kurmak ve yapılandırmak bir kabusa dönüşebilir ve genç geliştiricilerimizin çoğu ortamı bozar veya test etme isteğini kaybeder.
Gavin

1
Slaytların bağlantısı kesildi.
Dmitri Zaitsev

35

Şimdi PHPUnit'i tercih ediyorum, ancak başladığımda her zaman komut satırına erişemediğim için SimpleTest'i kullandım. SimpleTest güzeldir, ancak PHPUnit üzerinde gerçekten sahip olduğu tek şey bence web çalıştırıcısıdır.

PHPUnit'i sevmemin nedenleri , phing (SimpleTest'in yaptığı gibi), phpUnderControl ve Xinc gibi diğer PHP geliştirici araçlarıyla entegre olması . 3.0 sürümünden itibaren alay desteği var, aktif olarak geliştiriliyor ve dokümantasyon mükemmel.

Gerçekten bu soruyu kendiniz için cevaplamanın tek yolu, ikisini de bir süre denemek ve hangisinin tarzınıza daha uygun olduğunu görmektir.

DÜZENLEME: Phing artık SimpleTest ile de entegre oluyor.


4
Bir not, phing'in web sitesi SimpleTest'i desteklediğini söylüyor
philfreo

18
  • PHPUnit'i nasıl indirip kuracağımı anlayamadım.
  • Ancak SimpleTest'in nasıl kurulacağını kolayca anlayabildim.

    ( PHPUnit için talimatları hatırlayabildiğim kadarıyla , "PEAR ile kur ve başka bir şekilde nasıl yapılacağına dair herhangi bir talimat vermeyeceğiz" satırları boyunca bir şey söyledi) bkz:

  • http://www.phpunit.de/manual/current/en/installation.html

İçin SimpleTest , sadece indirmek ve kodundan öyle gösteriyor.

Benim için en basit kazandı.


4
Sanırım cevabınızı gönderdikten sonra dokümantasyon değişti. Bugün sadece 3 komut yazarsınız ve kurulur, kendi başınıza herhangi bir şey indirmenize bile gerek kalmaz.
Anti Veeranna

5
PHPUnit'i PEAR aracılığıyla kurabilir, manuel olarak indirebilir veya en son kodu github'dan alabilirsiniz. Ana sayfada kurulum talimatlarına açık bir bağlantı var. SimpleTest bana yalnızca bir seçenek sunuyor, sourceforge'a işaret ediyor ve sayısız reklam var ...
Potherca

1
Windows altında, PHPUnit'i yüklemek çok zor. 2 iş istasyonuna kurmak zorunda kaldım. İlki PEAR IRC kanalının yardımıyla 3 saat sürdü. İkincisi için (aynı işletim sistemi) asla başarılı olamadım. Bununla birlikte, Linux'ta bu bir çekiciliktir.
FMaz008

1
SimpleTest +1 Kurulumu kolay Kullanımı kolay. PHPUnit, ihtiyaçlarımı karşılamaktan daha güçlüdür.
Cheung

'09'dan beri işler değişmiş olabilir, ancak PHPUnit sadece Windows'ta birkaç komutla saniyeler içinde kuruldu.
Cypher


13

Kabul edilen cevapta belirtilen noktaların yarısı kesinlikle doğru değil:

SimpleTest vardır

  • daha kolay kurulum (klasöre çıkartın, dahil edin ve çalıştırın)
  • sadece sürüm kontrolünde klasörü kontrol edin (bunu günümüzde phpunit ile yapmayı deneyin :))
  • daha az bağımlılık ve çok sayıda uzantı (webtester, formtester, auth)
  • genişletmesi kolay (noktalar, işlev adları, renkler) iyi bir kod kapsamı muhabiri
  • bir kod kapsamı özeti (nihayet PHPUnit 4.x'e indi)
  • Gruplar ve tek dosya yürütmeleri ile iyi bir web çalıştırıcısı ve bir ajax web çalıştırıcısı
  • yine de daha iyi fark aracı (boşluk veya satırsonu sorunları olmadan)
  • SimpleTests'i phpUnit ile çalıştırmak için bir adaptör / sarıcı ve tersi
  • uyumluluk PHP5.4 +

Olumsuz tarafı:

  • endüstri standardı değil (PHPUnit)
  • aktif olarak korunmuyor

1
Hala benim ve patronum php4 sunucusu için yararlı ^^ "
javier_domenech

Teşekkürler. SimpleTest'in kod tabanını daha yeni PHP sürümleriyle çalışacak şekilde yükselttim ve yıl boyunca bazı ince ayarlar geliyor. - PHP4, asırlardan beri EOL'dir ve herhangi bir güvenlik yaması almaz. Artık harici hizmetlerde kullanmazdım. Patronunuzu en az v5.5 veya daha iyisi v5.6
Jens A. Koch

Jens'i tanıyorum, tavsiye için teşekkürler. Sizinki çok güzel test çözümü
javier_domenech

1
=) Bana Github deposunu gösterdiğiniz için teşekkür ederim. "Bakım yapılmayan kısım" hakkında endişelenmeye başlamıştım. Sadece yüzeysel olarak, dikkat edin, çünkü çalıştığım modern kodla düşük telaşlı bir test çerçevesinden istediğim her şeyi hala yapıyor.
jeteon

SimpleTest, test takımlarınızı nasıl kuracağınız konusunda çok daha fazla esnekliğe sahiptir, çünkü hepsini php kodunda yapabilirsiniz. Böylece, yalnızca xml yapılandırma dosyaları ve terminal parametreleri değil, tam bir programlama diline sahip olursunuz. PHPUnit, araçlar tarafından daha fazla destekleniyor olabilir, ancak PHP topluluğunun nasıl aşağılık şeyleri desteklemeyi seçtiği hakkında daha çok şey söylüyor.
still_dreaming_1

8

SimpleTest'in PHPUnit'i kurmaktan daha kolay olduğunu buldum. Sadece çıkarın ve gitmekte fayda var. Bunun bir faydası, birden fazla makinede çalışmanızdır, çünkü tüm test çerçevesini kaynak kodunuzla aynı şekilde depolayabilir ve böylece aynı çerçeve kodunu kullandığınızı bilirsiniz. Özellikle herhangi bir şekilde değiştirirseniz.

Bu yüzden, SimpleTest'in bir gücünün çok hafif ve taşınabilir olması olduğunu söyleyebilirim.

SimpleTest ayrıca, isterseniz genişletmesi oldukça kolay olan çok basit bir HTML GUI ile birlikte gelir. Bildiğim kadarıyla, PHPUnit bir HTML GUI içermiyor, ancak Cool gibi indirilebilecek GUI'ler var .


Ah, adamım bunu tamamen kazara reddettim ve ertesi güne kadar fark etmedim bile. Şimdi oyum kilitlendi ... Üzgünüm.
still_dreaming_1

8

PhpUnit web tabanlı bir UI test durumu çalıştırıcısı yaptım ve bunu sourceforge'da kullanıma sundum. Ajax kullanır ve oldukça güzel bir arayüze sahiptir, bir şans vermek istiyorsanız sourceforge'da kontrol edin. Proje adı phpunitwebui ve web sitesi http://phpunitwebui.sourceforge.net/


4

Belirtildiği gibi, her ikisi de onun için yazdığınız testleri çalıştıracağı ve sonuçları geri bildireceği için çoğunlukla bir tercih seçeneğidir.

En Basit web kullanıcı arayüzü çok kullanışlıdır, ancak bazen hantal da olabilir. Şu anki projemde, uygulamamın (bir API) web arayüzü ile çalışması için (apache'yi doğru bir şekilde kurmak, dosyaları public_html köküne kopyalamak vb.) İçin sisteme olduğundan daha fazla iş koymam gerekirdi. phpunit'i tutulma çalışma alanından çalıştırmak için. Bu nedenle PHPUnit'i seçiyorum. Ayrıca, güncellemeleri manuel olarak takip etmeniz gerekmediğinden PEAR kullanımı büyük bir artıydı. Arada bir çalıştırın pear upgradeve PHPUnit güncel kalacaktır.


Bu analizi anlamıyorum. Yerel bir apache kurulumu yerine phpunit için eclipse eklentisi aracılığıyla tarayıcı tipi işlevselliği test ettiğinizi mi söylüyorsunuz?
Kzqai

Hayır, projemde tarayıcı tipi işlevsellik olmadığı için eclipse aracılığıyla phpunit kullanıyorum diyorum.
T0xicCode

2

Bu, çok sıradan bir PHP geliştiricisinin bakış açısından:

PHPUnit'i kavramam iki günümü aldı, çoğunlukla Eclipse altında hata ayıklamaya çalışırken sonunda vazgeçtim.

Eclipse altında hata ayıklama dahil Simpletest'i kurmak iki saatimi aldı.

Belki gelecekte Simpletest'in eksikliklerini bulabilirim ama şu ana kadar ihtiyacım olanı iyi yapıyor: TestClass'lar, Mock nesneleri, test kodu hata ayıklama ve durumun hızlı bir anlık görüntüsü için web arayüzü.

Yine: Bu, çok sıradan bir PHP kullanıcısının bakış açısından (geliştirici bile :-)


1

Simple Test'i bir süredir kontrol etmedim, en son benim için önemli bir faktör olan tutulma eklentisine sahipti, ancak uzun süredir güncellenmedi. Sebastian Bergmann hala çok aktif bir şekilde PHPUnit üzerinde çalışıyor, ancak yine de tutulma için iyi bir eklentiden yoksun - ancak yeni Zend Studio için dahil edildi.


1

Bu soru eski, ancak deneyimlerimi eklemek istiyorum: PHPUnit şu anda standart gibi görünüyor, ancak çok sayıda global değişken kullanan eski bir sistemle çalışıyorsanız, en baştan takılıp kalabilirsiniz. PHPUnit'te global değişkenlerle test yapmanın iyi bir yolu yok gibi görünüyor, her yerde global değişkenleri ayarlayan tonlarca dosyanız varsa, değişkenlerinizi $ GLOBALS ile belirlemeniz İYİ DEĞİLDİR. Tamam, bazıları sorunun eski sistemde olduğunu söyleyebilir ancak bu, bu tür bir sistem üzerinde test yapamayacağımız anlamına gelmez. SimpleTest ile böyle bir şey basittir. PHPUnit herhangi bir sınıf / işlev kapsamında değil de global olarak bir dosya eklememize izin veriyorsa, o zaman bu da çok fazla sorun olmazdı.

Başka bir umut verici çözüm de http://www.enhance-php.com , güzel görünüyor :)


Her zaman <phpunit backupGlobals="false">yapılandırma
XML'sinde kullandım

@ mr1031011 bağlantınız yararlı bir yere gitmiyor. Belki de demek istediniz
user12345

@Potherca bana bundan bahset - Başlangıçta eski bir kod projesinde globallerle birçok sorun yaşadım global $xxxve tüm ek açıklamaları @backupGlobals @backupStaticAttributes @runInSeparateProcess @preserveGlobalState ve tüm kombinasyonlarını denemeden --no-globals-backupve birdenbire görmeden önce denedim. beklendiği gibi çalışıyor. : D
conny

-2

tek seferde test edilecek binlerce işlev olduğunda, phpunit gitme yoludur, basit test web tabanlı olduğu için yetersiz kalır.

Hala küçük ölçekli testler için basit web kullanıyorum.

Ama ikisi de iyi


SimpleTest tamamen web tabanlı değildir . Şimdiye kadar sadece komut satırından kullandım.
jeteon
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.