2011-08-04 11 views
13

aracılığıyla phpunit testlerini çalıştırırken $ _SERVER [''] değişkenleri nasıl ayarlanacağım Birçok kod değişikliğinin mümkün olmadığı bir uygulama için birim testleri yazmaya çalışıyorum. Ben bir şekilde bu değişkenleri belirlemek zorunda PHPUnit test durumları yazmak ve çalıştırmak zorunda Neredeyse kod tabanında tüm .php dosyaları Şimdi Jenkins

require_once $_SERVER['DOCUMENT_ROOT'] . '/mainApi.php'; 

gibi bazı $ _SERVER [ ''] değişkenleri kullanır. Şu anda Ben kullanıcı ortamında bu değişkenleri ayarlayarak ve daha sonra bu gibi sunucu değişkenleri iyi çalışıyor alınıyor

$_SERVER['DOCUMENT_ROOT'] = getenv('DOCUMENT_ROOT'); 
require_once $_SERVER['DOCUMENT_ROOT'] . '/mainApi.php'; 

yapıyorum. Testlerimi komut satırı aracılığıyla $ phpunit test.php olarak çalıştırıyorum.

Ques1: $ _SERVER değişkenlerini phpunit testlerini komut satırından çalıştırırken ayarlamak mümkün müdür?

Ayrıca bu birim testlerini Jenkins üzerinden çalıştırmam gerekiyor ve bu sunucu değişkenini ANT/build dosyası üzerinden ayarlayamıyorum.

Ques2: Bu değişkeni Jenkins'de ant derleme dosyası üzerinden veya phpunit testlerini Jenkins üzerinden yürütmeden önce herhangi bir kabuk betiğini çalıştırarak ayarlamak mümkün müdür?

Ben Jenkins

yılında build.xml
<export name="setEnv" description="set server var"> 
    <exec executable="sh"> 
     <arg value = "sumit.sh" /> 
    </exec> 
</target> 

ama onun çalışmıyor o senaryoyu bir kabuk

export DOCUMENT_ROOT=/server/path-to-root-dir 

aracılığıyla sunucu değişkeni ihracat ve aramaya çalıştı. Bunun için yapabileceğim bir ayar var mı? Teşekkürler!

cevap

6

# 1 hakkında emin değilim, ama PHPUnit'in kendisini desteklemesi gerekecekti. Bunu komut satırı üzerinden yapmanın bir yolunu görmüyorum. Ancak, geçerli geçici çözümünüzü bootstrap.php'a eklerseniz, her bir sınamada yapmanız gerekmez.

# 2 için, <exec>, iç içe geçmiş <env> öğelerini kullanarak ortam değişkenlerini ayarlamanızı sağlar. Bunu Jenkins'de kullanıyorum.

<exec executable="phpunit" ...> 
    <env key="DOCUMENT_ROOT" value="/var/www/php"/> 
</exec> 

Güncelleme: Genellikle kurulum için bootstrap.php dahil yoluna kaynak dizini ekleyip ancak ihtiyacınız test ortamı başlatmak oluşturun. Bu dosya, phpunit.xml'dan farklı olarak PHPUnit tarafından sağlanmaz.

phpunit.xml ile aynı dizine yerleştiriyorum, ancak her proje için ayrı bir dosyam var çünkü. Testlerinizi tipik olarak tutan dizine gider. Bu, phpunit'u komut satırından bu yapılandırma dosyalarını nasıl bulacağınızı söylemeden çalıştırmanıza izin verir. Aksi halde, bunlara işaret etmek için --bootstrap ve/veya --configuration'u kullanmanız gerekir.

<project-root>/ 
    build.xml 
    src/ 
     MyClass.php 
    test/ 
     MyClassTest.php 
     phpunit.xml 
     bootstrap.php 
+0

biz ayarlayabilirsiniz '$ _SERVER [ 'DOCUMENT_ROOT']' doğrudan yapı dosyası üzerinden: Burada

ben tipik bir proje yapısı nasıl?Sizin yönteminiz 'gayet iyi çalışıyor fakat kodumda çok fazla SUNUCU değişkenine sahibim: '$ _SERVER [] = getenv() Bir php dosyasında ve bu dosyayı tüm test sınıflarında içe aktarmak zorunda kalacaksınız. Onu azaltabilmemizin bir yolu var mı? – Sumitk

+0

@Sumitk - PHPUnit'in herhangi bir test yapmadan önce otomatik olarak yüklediği 'bootstrap.php' adlı ödevleri atayabilirsiniz. Ya dosyayı dizininize testlerinizin kök dizinine yerleştirin ya da PHPUnit'i '--bootstrap' komut satırı argümanı ile işaretleyin. –

+0

Bu 'bootstrap.php', test dosyalarıyla birlikte oluşturduğumuz bir dosya mı yoksa PHPUnit ile mi geliyor? Coz, sistemimde göremiyorum. Ayrıca eğer onu yaratırsak, nereye yerleştirmeliyim? tüm test dosyalarıyla veya phpunit.xml.dist ile mi? – Sumitk