2008-09-12 11 views
3

Çalıştığım web sitesini test etmek için PHPUnit'i kullanmayı öğrenmeye başlıyorum. İçinde bulunduğum sorun, tanımlanmış beş farklı kullanıcı tipine sahip olduğum ve her sınıfı farklı türlerle test edebilmem gerektiğidir. Şu anda bir kullanıcı sınıfım var ve bunu her bir işleve iletmek istiyorum ancak bunu nasıl geçeceğimi ya da doğru ya da geri gelebilecek farklı hataları test edemediğimi anlayamıyorum.Ünitenin En İyi Yolu PHPUnit'li Çoklu Kullanıcı Türleriyle Bir Web Sitesini Test Edin

Düzenleme: Bunu söylemeliydim. Bir kullanıcı sınıfım var ve bu birimin farklı bir örneğini her bir birim testine aktarmak istiyorum.

cevap

2

Farklı kullanıcı sınıflarınız bir üst kullanıcı sınıfından miras alınırsa Daha sonra, test vakası sınıflarınız için aynı kalıtım yapısını kullanmanızı öneririm. Eğer test durumu sınıflarıyla aşağıdaki yapabileceğini

class User 
{ 
    public function commonFunctionality() 
    { 
     return 'Something'; 
    } 

    public function modifiedFunctionality() 
    { 
     return 'One Thing'; 
    } 
} 

class SpecialUser extends User 
{ 
    public function specialFunctionality() 
    { 
     return 'Nothing'; 
    } 

    public function modifiedFunctionality() 
    { 
     return 'Another Thing'; 
    } 
} 

:

Aşağıdaki örnek sınıfları düşünün her test geçersiz kılmak bir oluşturmak yönteme bağlı olduğundan

class Test_User extends PHPUnit_Framework_TestCase 
{ 
    public function create() 
    { 
     return new User(); 
    } 

    public function testCommonFunctionality() 
    { 
     $user = $this->create(); 
     $this->assertEquals('Something', $user->commonFunctionality); 
    } 

    public function testModifiedFunctionality() 
    { 
     $user = $this->create(); 
     $this->assertEquals('One Thing', $user->commonFunctionality); 
    } 
} 

class Test_SpecialUser extends Test_User 
{ 
    public function create() { 
     return new SpecialUser(); 
    } 

    public function testSpecialFunctionality() 
    { 
     $user = $this->create(); 
     $this->assertEquals('Nothing', $user->commonFunctionality); 
    } 

    public function testModifiedFunctionality() 
    { 
     $user = $this->create(); 
     $this->assertEquals('Another Thing', $user->commonFunctionality); 
    } 
} 

, çünkü Test yöntemleri, ana sınama sınıfından miras alınır, beklenen davranışları değiştirmek için geçersiz kılmadığınız sürece, üst sınıfa yönelik tüm sınamalar, alt sınıfa karşı çalıştırılır.

Bu sınırlı deneyimimde harika çalıştı.

1

Gerçek kullanıcı arayüzünü test etmek istiyorsanız, Selenium (www.openqa.org) gibi bir şey kullanmayı deneyebilirsiniz. Bu, tarayıcıyı sürmek için PHP'de kodu (phpUnit ile çalışacağını farz ediyorum) yazmanıza izin verir.

Farklı bir kullanıcı tipi için her bir testte aranabilecek ortak bir yönteme sahip olmak başka bir yaklaşım olacaktır. . yani, 'ValidatePage' gibi bir şey, daha sonra TestAdminUser veya TestRegularUser'den arayabilir ve bu yöntemde beklediğiniz şeyi aynı temel doğrulamayı gerçekleştirebilir.

1

Sadece burada bir anti-pattern içine girmediğinizden emin olun. Belki yapıcıda fazla iş yaparsın? Ya da belki bunlar aslında farklı sınıflar olmalı? Testler genellikle kod tasarımı hakkında ipuçları verir. Onları dinleyin.

İlgili konular