The line-by-line web translator reordered words inside `**bold**` spans and misplaced/dropped the markers, producing `**LB` or `****` (empty bold). Mask each `**...**` as ONE atomic sentinel: translate the inner text on its own, then store the whole balanced `**inner**` — the engine never sees the markers and cannot reorder or collapse them. Also harden the anthropic prompt to keep emphasis balanced. Auto-prune: after translating, delete generated docs/ru files whose docs/en source no longer exists (renamed/removed) and drop now-empty dirs, so the tree mirrors docs/en 1:1 (removes the stale development/modules.md and guides/geoip-and-device-detection.md). Bump PROMPT_VERSION to 6 to invalidate the contaminated cache and regenerate docs/ru (0 broken bold spans remaining, aside from pre-existing multi-line bold that spans a soft line break).
5.2 KiB
PHPUnit PHAR: Загрузка и запуск тестов
В этом руководстве показано, как запускать тесты проекта с фиксированным двоичным кодом PHP:
- PHP двоичный файл:
/home/xc_vm/bin/php/bin/php(связанный PHP на VDS) - Двоичный файл PHPUnit: local
tools/.bin/phpunit.phar
Local vs VDS. The commands here use the VDS bundled PHP. When running on your own компьютер (см. Рабочий процесс разработки), вместо этого используйте свой локальный PHP 8.1:
php tools/.bin/phpunit.phar -c tests/phpunit.xml.dist. CI запускает тот же набор данных через зафиксированная конфигурация, поэтому зеленый локальный запуск должен соответствовать CI.
Почему такая установка
phpunit.phar не включает PHP. Он всегда выполняется через интерпретатор PHP.
Если вы запустите ./phpunit.phar напрямую, он может использовать другой php из PATH.
Используйте явный двоичный путь для обеспечения согласованности во время выполнения.
Схема тестирования и соглашения
Тесты проходят в режиме реального времени снаружи src/, в режиме tests/:
tests/
├── phpunit.xml.dist # config: suite "XC_VM Unit", bootstrap=bootstrap.php (PHPUnit 10.5)
├── bootstrap.php # locates vendor/autoload.php + defines constants (MAIN_HOME, PHP_BIN, paths)
├── Support/ # test helpers (e.g. TestDb.php)
└── Unit/ # the "XC_VM Unit" suite — one *Test.php per unit
├── CoreEnumTest.php
├── EventDispatcherTest.php
└── ...
Условные обозначения: тестовый класс равен <Thing>Test в tests/Unit/<Thing>Test.php, расширяет
PHPUnit\Framework\TestCase. bootstrap.php подключает Composer автозагрузчик (таким образом
XcVm\… классы разрешают — для этого требуется src/vendor/, т.е. сначала запустить make dev-tools) и
определяет константы среды выполнения, на которые опираются тесты. Минимальный тест:
<?php
namespace XcVm\Tests\Unit;
use PHPUnit\Framework\TestCase;
use XcVm\Core\Enum\BootContext;
final class MyThingTest extends TestCase
{
public function testItWorks(): void
{
self::assertSame('admin', BootContext::Admin->value);
}
}
Если классы не загружаются (
Class "XcVm\…" not found), то вsrc/vendor/отсутствует автозагрузчик — запуститеmake dev-tools.
1. Проверить PHP
/home/xc_vm/bin/php/bin/php -v
2. Скачать PHPUnit PHAR
Этот проект привязан к PHP 8.1, поэтому используйте Модуль PHP 10 (10.5). Не извлекайте phpunit-11.phar — для PHPUnit 11 требуется PHP 8.2+, и он откажется запускаться на 8.1.
cd /home/xc_vm
mkdir -p tools/.bin
wget -O tools/.bin/phpunit.phar https://phar.phpunit.de/phpunit-10.phar
chmod +x tools/.bin/phpunit.phar
3. Проверьте PHPUnit
/home/xc_vm/bin/php/bin/php tools/.bin/phpunit.phar --version
4. Выполните все тесты
Конфигурационный файл проекта:
tests/phpunit.xml.dist
Бежать:
/home/xc_vm/bin/php/bin/php tools/.bin/phpunit.phar -c tests/phpunit.xml.dist
5. Запустите один тестовый файл
/home/xc_vm/bin/php/bin/php tools/.bin/phpunit.phar -c tests/phpunit.xml.dist tests/Unit/GitHubReleasesTest.php
6. Показать, какой тест выполняется сейчас
Используйте режим отладки для печати текущего теста:
/home/xc_vm/bin/php/bin/php tools/.bin/phpunit.phar -c tests/phpunit.xml.dist --debug --no-progress
7. Дополнительно: Выход покрытия
Если установлено значение xdebug или pcov:
XDEBUG_MODE=coverage /home/xc_vm/bin/php/bin/php tools/.bin/phpunit.phar -c tests/phpunit.xml.dist --coverage-text
Защитная записка
Не фиксируйте phpunit.phar в репозитории. Сохраняйте его локальным (tools/.bin) и обновляйте независимо.
Связанные файлы
| Файл | Роль |
|---|---|
tools/.bin/phpunit.phar |
Закрепленный двоичный файл PHPUnit |
tests/phpunit.xml.dist |
Конфигурация PHPUnit |
tests/bootstrap.php |
Тестовый bootstrap (Composer автозагрузчик + константы) |