2012-04-09 101 views
1

我正在嘗試使用一些舊代碼對應用程序進行一些集成測試。我期望測試的是在應用程序中發生的某些事件鏈(在用戶的前端觸發,例如投入訂單,支付訂單)發生的某些事件鏈之後,存在某些數據庫條目。使用PHPUnit進行集成測試(檢查數據庫值)

目前,我建立了一個空的數據庫,然後放入事件的應用程序邏輯,然後看看數據庫。

有沒有更好的方法來做到這一點?看起來這可能是一個痛苦要維護。

下面是一些僞代碼:

class someTests extends PHPUnit_Framework_TestCase { 
function setupScenario1(){ 
    //create a new database, put in initial values 
} 

//test that an order is created properly 
function testScenario1(){ 
    $this->setupScenario1(); 
    $this->loadOtherConfigs(); 

    //now do some application logic 
    //setup an object to pass into a factory 
    $OrderInfo->ID = 5; 
    $OrderInfo->ProductID = 1; 

    $Order = new OrderFactory->Create($OrderInfo); 
    $PostOrderProcessor = new $PostOrderProcessor(); 
    $PostOrderProcessor->Process($Order); 

    //assert that certain database entries were made 
} 

//test that an order is created properly, and then the payment is processed properly 
function testScenario12(){ 
    $this->testScenario1(); 

    //hard coded from testScenario1 
    $OrderID = 5; 

    //setup payment stuff 
    $PaymentInfoObj->Amount = 500; 
    $PaymentInfoObj->Type = PaymentType::CREDIT_CARD; 

    //now do some application logic 
    $MockPaymentResult->Status = PaymentResult::APPROVED; 
    $MockPaymentProcessor = $this->getMockBuilder('PaymentProcessor')->disableOriginalConstructor()->getMock(); 
    $MockPaymentProcessor->expects($this->once()) 
         ->method('process') 
         ->will($this->returnValue($MockPaymentResult)); 

    $PaymentProcessingWrapper = new PaymentProcessingWrapper($AppraisalsDAO,$MockPaymentProcessor); 
    $Result = $PaymentProcessingWrapper->TryToProcessPayment($OrderID,$PaymentInfoObj); 

    //assert that certain database entries were made 
} 

}

回答

1

大多數數據庫斷言問題是由Codeception測試框架解決。 這是一個穩固的PHPUnit封裝。結帳它是Db module

它還與流行的ORM和不同的DBMS集成。

唯一的限制是使用DB模塊需要以特殊格式編寫測試。簡要描述here