Я думаю, что происходило то, что PHPUnit делал сборку мусора. Всякий раз, когда я запускал 307 тестов, сборщик мусора должен был запускаться, и он по какой-то причине разрушал таблицу Zend_Session_SaveHandler_DbTable.
Это объясняет, почему он не разрушался, когда выполнялось меньше тестов.
Или, может быть, именно PHP выполняет сборку мусора, что имеет больше смысла.
В любом случае, мое текущее решение состоит в том, чтобы создать новый объект Zend_Application для каждого класса тестов, чтобы у всех тестов в этом классе был новый объект zend_application для работы.
Вот немного интересной информации.
Я поместил выражение echo в метод __destruct в обработчике сохранения.
Метод вызывался (X + 1) раз, где X - количество выполненных мной тестов. Если я выполнил 50 тестов, я получил 51 эхо, 307 тестов, затем 308 эхо и т. Д.
Вот интересная часть. Если бы я выполнил только несколько тестов, эхо все пришло бы в конце тестового прогона. Если бы я попытался выполнить все 307 тестов, 90 эхо-сигналов появилось бы после того, что, как я предполагал, было 90 тестами. Остальные эхо-сигналы появятся в конце оставшихся тестов. Число эхо-сигналов снова было Х + 1, или в данном случае 308.
Итак, я предполагаю, что это как-то связано с методом tearDown, вызываемым PHPUnit, или с сборщиком мусора PHP. Возможно, PHPUnit вызывает сборщик мусора при разборке. Кто знает, но я рад, что теперь у меня все получилось, потому что все мои тесты проходили заранее.
Если у кого-нибудь из вас есть лучшее решение, дайте мне знать. Может быть, я обнаружил в своем коде, phpunit или zend недостаток, который раньше не был известен, и есть какой-то способ его исправить.