2012-04-09 4 views
1

私はいくつかのレガシーコードでアプリケーションの統合テストをしようとしています。私がテストしようとしているのは、特定のデータベースエントリが存在する特定の一連のイベント(アプリケーションがフロントエンドでトリガされた、注文を出して注文するなど)が発生した後です。PHPUnitによる統合テスト(DB値のチェック)

現在、私は空のデータベースを設定し、イベントのアプリケーションロジックを入れてからdbを見ます。

これを行うより良い方法はありますか?それは維持する痛みかもしれないようだ。データベースアサーションの

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と記載されています。