테스트를 실행할 때 zend_db_table_abstract fetchrow 반환 쓰레기 데이터를 어떻게 중지하려면 어떻게해야합니까?
-
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 필드가있는 테이블이있는 다른 테이블이나 다른 데이터베이스가 있습니까? 잘못된 어댑터를 사용할 수 있으므로 쿼리가 여전히 실행되는 이유를 설명합니다. 시험 환경의 전제 조건은 최소한 생산 환경 (표 + 필드)과 동일한 구조를 갖는 것입니다. 그것들이 다르면 일부 쿼리는 잘 실행될 수 있으며 다른 쿼리는 그렇지 않을 수 있습니다.