2012-04-09 2 views
1

는 좀 레거시 코드를 사용하여 응용 프로그램에 대한 몇 가지 통합 테스트를 수행하려합니다. 내가 테스트하려는 것은 응용 프로그램에서 발생하는 특정 일련의 이벤트 (예 : 주문을 넣고 지불하는 등 사용자가 프론트 엔드에서 트리거 한)에서 발생하는 일정한 사슬 체인 이후에 특정 데이터베이스 항목이 존재한다는 것입니다.통합 테스트

현재, 나는 다음 이벤트에 대한 응용 프로그램 논리에 넣어 빈 데이터베이스를 설정 한 후 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의 견고한 래퍼입니다. Checkout은 Db module입니다.

은 또한 그것은 대중으로 ORMs 다른 DBMS와의 통합이 있습니다.

유일한 제한은 DB 모듈을 사용하는 특별한 형식으로 작성하는 테스트를 필요로한다는 것이다. 간단히 설명하면 here입니다.