2012-08-13 2 views
1

testcase/testsuite에서 셀레늄을 통해 여러 테스트를 실행하고 모든 tearDown의 끝에 데이터베이스 테스트를 연결하려면 (tearDown에서 호출 할 수없는 어설 션을 사용하여). teardown 후 phpunit 데이터베이스 테스트

그래서 워크 플로우는 다음과 같습니다

  • 설정 데이터베이스에 대한 연결 및 설정에 setUpBeforeClass()
  • 설정 데이터베이스 (내용 만) (의 스키마)
  • test01
  • 을 실행
  • TearDown 내용
  • 데이터베이스에있는 모든 테이블의 행 수가 0 인 경우에 어서 트하십시오.

그래서 모든 tearDown의 끝 부분에 추가 어설 션을 연결하는 방법이 있습니까?

assertPreConditions에서 설정을 시도하고 assertPostConditions에서 tearDown을 시도했지만 추한 것 같습니다. 사전

+0

왜 당신은이 주장 넣을 수 없습니다 : 당신이 원하는의 tearDown() 함수는 다음과 같이 보일 수 있다면

그래서

궁금 : 그래서, 당신의 단위 테스트 코드의 유효성을 확인하는 이유는 PHP의이 주장 사용하지 포스트 조건에 대한 주장을하고 있다면'assertPostConditions'에? 'tearDown'이 데이터베이스 연결을 파괴합니까? 그렇다면,'tearDown'의 시작 부분에 놓으십시오. –

답변

0

에서

들으 당신도 tearDown()에 어디서나 어설를 사용할 수 있습니다 보인다.

class TearDownTest extends PHPUnit_Framework_TestCase 
{ 

/** */ 
public function setUp(){ 
    echo "In setUp\n"; 
    //$this->assertTrue(false); 
    } 

/** */ 
public function tearDown(){ 
    echo "In tearDown\n"; 
    $this->assertTrue(false); 
    } 

/** */ 
public function assertPreConditions(){ 
    echo "In assertPreConditions\n"; 
    //$this->assertTrue(false); 
    } 

/** */ 
public function assertPostConditions(){ 
    echo "In assertPostConditions\n"; 
    //$this->assertTrue(false); 
    } 

/** 
*/ 
public function testAdd(){ 
    $this->assertEquals(3, 1+2); 
    } 

} 

하지만, 엄지 손가락의 하나의 규칙을 I가있다 : 소프트웨어가 내 인생을 어렵게하는 경우, 어쩌면 내가하고있어이 테스트 케이스 (phpunit testTearDown.php 실행, testTearDown.php로 저장)을 제대로 실패 제공 뭔가 잘못. 당신은 tearDown 코드가 실행 된 후하려는 썼다 : ". 데이터베이스의 모든 테이블 제로의 행 개수가있는 경우 어설"

당신이 당신의 단위 테스트 코드를 확인하려면 같은이 소리 제대로 작성되었습니다 ,이 경우 tearDown이 제대로 작동 했습니까? 실제로 테스트중인 코드와 아무런 관련이 없습니다. phpUnit 어설 션 메커니즘을 사용하면 혼란스럽고 오해의 소지가 있습니다. 위 예제에서 tearDown이 assert하면 testAdd()가 실패했다는 것을 알 수있다. 올바르게 작동하지 않는 tearDown() 코드가 실제로있는 경우이를 대신 말하고 싶습니다.

public function tearDown(){ 
    tidyUpDatabase(); 
    $cnt=selectCount("table1"); 
    assert($cnt==0); 
    $cnt=selectCount("table2"); 
    assert($cnt==0); 
    } 
+0

당신 말이 맞아요. 별도의 테스트 또는 assert로 tearDown 테스트를 테스트하고 실제 테스트를 위해 assertPostConditions를 사용하는 것이 더 합리적입니다. 또한 행 수 대신에'CHECKSUM TABLE'을 사용하기로 결정했습니다. 답변을위한 Thx – user1441641