Я пытаюсь написать тесты, используя php для базы данных. У меня есть таблица, в которой хранится хэш пароля как двоичный. Как установить тестовые данные в наборе данных xml, например, здесь есть шестнадцатеричные данные, и я получаю данные об ошибках слишком долго для столбца. Спасибо.
<dataset> <table name="subscription_ips"> <column>password</column> <row> <value>0x771C87E79B130E3FB966E424D7F1358D8DABBA0A26F288C0C1B5D8E3D95F2942100CA54B6824A7AC0964180A9426A1C37C371BA3FDBB000621FE175608C4B16C</value> </row> </table> </dataset>
Но похоже, что phpunit не может вставить его, используя
0x771C87E79B130E3FB966E424D7F1358D8DABBA0A26F288C0C1B5D8E3D95F2942100CA54B6824A7AC0964180A9426A1C37C371BA3FDBB000621FE175608C4B16C
вместо 0x771C87E79B130E3FB966E424D7F1358D8DABBA0A26F288C0C1B5D8E3D95F2942100CA54B6824A7AC0964180A9426A1C37C371BA3FDBB000621FE175608C4B16C
пытается вставить тестовые данные в таблицу.
Это буквальная двоичная строка, которую понимает MySQL. Я подозреваю, что PHPUnit этого не понимает. Вы можете попробовать использовать эквивалент для XML, используя ссылки на сущности, или, может быть, вам повезет, а в парсере PHPUnit будет использоваться base64Binary
.
Теперь я вижу такое решение, используя декоратор-декоратор:
public function getDataSet($pFileName=null) { if ($pFileName===null) { $vFileName = $this->_fixturesDir.'init_flat.xml'; } else { $vFileName = $pFileName; } $ds = $this->createFlatXmlDataSet($vFileName); $rds = new PHPUnit_Extensions_Database_DataSet_ReplacementDataSet($ds); $rds->addSubStrReplacement('##HASH_wince4_1318143535##', hash('sha512', 'wince4' . '1318143535', true)); $rds->addFullReplacement('##NULL##', null); return $rds; }
В flatXML: он не кажется надежным, удобным и масштабируемым. Мы пытаемся заменить некоторый текст необходимым хэшем. Надеюсь, кто-нибудь может предложить более подходящее решение проблемы.