테스트를 실행할 때 zend_db_table_abstract fetchrow 반환 쓰레기 데이터를 어떻게 중지하려면 어떻게해야합니까?

StackOverflow https://stackoverflow.com/questions/1643380

  •  10-07-2019
  •  | 
  •  

문제

저는 Zend를 처음 접했고 단위 테스트를 만드는 데 어려움이 있습니다. 나는 그것을 내가하고있는 일이되기를 희망하여 여전히 문제를 복제하는 최소 테스트 클래스로 제거했습니다.

class UserRegistrationsTest extends PHPUnit_Framework_TestCase 
{ 

보호 된 $ db;

public function __construct ($ name = null) {parent :: __ construct ($ name);

$ this-> db = zend_db :: factory ( 'pdo_mysql', array ( 'host'=> '127.0.0.1', 'username'=> 'root', 'password'=> 'xxxxxxxx', 'dbname'= > 'testingdb'));

zend_db_table_abstract :: setDefaultAdapter ($ this-> db); }

public function testName () {$ users = new Users (); $ select = $ user-> select ()-> where ( 'regcode =?', 'deadbeef'); $ row = $ user-> fetchrow ($ select); }

}

그래서 이것은 단순화 된 테스트입니다. 내부에 데이터가있는 DB 설정 (올바르게 연결됩니다)이 있습니다. Regcode가 'Deadbeef'로 설정된 레코드가 있으며 이메일, regdate 및 계열사를위한 필드도 있습니다.

CREATE TABLE  testingdb.users (
         regCode varchar(16) NOT NULL,
         email varchar(150) NOT NULL,
         regDate datetime NOT NULL,
         affiliate int(10) unsigned DEFAULT NULL,
         PRIMARY KEY (regCode))   

user.php라는 클래스가 있습니다.

class Users extends Zend_Db_Table_Abstract {

protected $_name = 'users';

}

내 문제는 데이터베이스에 잘 삽입 할 수 있지만 쿼리는 홀수 결과를 반환한다는 것입니다. 위의 페치로는 올바른 SQL을 생성하지만 반환 된 행은 쓰레기입니다. regcode, 이메일, regdate 열이 전혀 포함되지 않은 행을 반환하면 계열사가 있지만 Collumn은 '계열사'대신 '사용자'라고합니다.

다른 테이블에서 시도했지만 작동하지 않습니다. 일부는 데이터베이스 이름을 열 헤더로 반환하고 테이블 이름을 열로 반환합니다.

주목해야 할 것은 테스트에서 이것을 실행하지 않으면 잘 작동한다는 것입니다. 적절한 앱에서 정확히 동일한 코드와 DB는 훌륭하지만 PhPunit 테스트로 실행되며 모든 내용이 나옵니다 :-(

모든 조언에 감사드립니다

건배, 브린

도움이 되었습니까?

해결책 2

이것은 지금 고정 된 오래된 Zend 버그였습니다.

다른 팁

Regcode 필드가있는 테이블이있는 다른 테이블이나 다른 데이터베이스가 있습니까? 잘못된 어댑터를 사용할 수 있으므로 쿼리가 여전히 실행되는 이유를 설명합니다. 시험 환경의 전제 조건은 최소한 생산 환경 (표 + 필드)과 동일한 구조를 갖는 것입니다. 그것들이 다르면 일부 쿼리는 잘 실행될 수 있으며 다른 쿼리는 그렇지 않을 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top