2011-10-18 149 views
1

我有一個訪問Web服務的類。它可以選擇性地緩存結果。所以我想寫兩個測試類。第一個(Ws_Test)運行沒有緩存的測試。第二個(WsCached_Test)擴展第一個並運行相同的測試,但啓用緩存。PHPUnit - 用於測試同一對象的兩個測試類

在理論上解決了我的問題,但是當我運行'all tests'時只運行第二個測試類(WsCached_Test)。似乎PHPUnit假定當WsCached_Test運行時,該類已經完全測試過。

class Ws_Test extends PHPUnit_Framework_TestCase 
{ 
    public function setUp() 
    { 
     $this->ws = new Ws(); 
    } 

    // lots of tests 
} 

class WsCached_Test extends Ws_Test 
{ 
    public function setUp() 
    { 
     $this->ws = new Ws(); 
     $this->ws->setCacheResults(true); 
    } 

    // inherits lots of tests 
} 

回答

2

我不知道這是否會解決這個問題,但我在一個固定的第一次嘗試是使基類的抽象,有兩個子類:WsCached_TestWsUncached_Test

abstract class BaseWsTester extends PHPUnit_Framework_TestCase 
{ 
    public function setUp() 
    { 
     $this->ws = new Ws(); 
    } 

    // lots of tests 
} 

class WsUncached_Test extends BaseWsTester 
{ 
    // inherits lots of tests 
} 

class WsCached_Test extends BaseWsTester 
{ 
    public function setUp() 
    { 
     parent::setUp(); 
     $this->ws->setCacheResults(true); 
    } 

    // inherits lots of tests 
} 

名稱BaseWsTester選擇保持PHPUnit的從想這是要運行的測試案例,它的抽象性應該有所幫助。如果這不起作用,請將setUp()向下移動到每個子類中,並將其從基類中移除。

+0

簡單而完美!謝謝! – Marcelo