1

いくつかのレガシー コードを含むアプリケーションの統合テストを行おうとしています。私がテストしようとしているのは、アプリケーションで発生する特定の一連のイベント (注文の投入、注文の支払いなど、ユーザーによってフロントエンドでトリガーされる) の後に、特定のデータベース エントリが存在することです。

現在、空のデータベースをセットアップし、イベント用のアプリケーション ロジックを配置してから、データベースを調べています。

これを行うより良い方法はありますか?維持するのが苦痛になりそうです。

ここにいくつかの擬似コードがあります:

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
}

}

4

1 に答える 1

1

データベース アサーションに関するほとんどの問題は、 Codeceptionテスト フレームワークによって解決されました。これは、PHPUnit の上にある堅実なラッパーです。それがDb moduleであることを確認してください。

また、一般的な ORM やさまざまな DBMS と統合されています。

唯一の制限は、DB モジュールを使用するには、特別な形式でテストを記述する必要があることです。ここ で簡単に説明します。

于 2012-04-10T21:44:03.617 に答える